为什么在SQLite中,SELECT (SELECT 1 UNION SELECT 2 UNION SELECT 3)



在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语句与操作符UNIONINTERSECT组合在一起。
所有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)

相关内容

  • 没有找到相关文章

最新更新