在SQLite中,如果我输入:
SELECT (SELECT 1 UNION SELECT 2 UNION SELECT 3) INTERSECT SELECT 3 UNION SELECT 4
我得到结果4
。这怎么可能呢?
SELECT 1 UNION SELECT 2 SELECT 3
=(1, 2, 3)
,对吧?SELECT 3 UNION SELECT 4
=(3, 4)
。相交点应该是3
,对吧?我说错了什么?
INTERSECT
首先评估并不能回答我的问题,因为((1,2,3) INTERSECT (3)) UNION (4)
是(3,4)
,而不是4
。
如果你这样写语句:
SELECT (SELECT 1 UNION SELECT 2 UNION SELECT 3)
INTERSECT
SELECT 3
UNION
SELECT 4
您可以看到您将3个SELECT
语句与操作符UNION
和INTERSECT
组合在一起。
所有3个语句应该返回相同的列数。
你的第一个语句:
SELECT (SELECT 1 UNION SELECT 2 UNION SELECT 3)
实际上只返回1行1列,试一下,这是第一行,结果是1
。
所以你的代码相当于:
SELECT 1
INTERSECT
SELECT 3
UNION
SELECT 4
,INTERSECT
不返回任何值,最后UNION
返回4
。
如果你想写:
SELECT * FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)
INTERSECT
SELECT 3
UNION
SELECT 4
则结果为(3, 4)
。