在 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
uj5u.com熱心網友回復:
如果你這樣寫你的陳述:
SELECT (SELECT 1 UNION SELECT 2 UNION SELECT 3)
INTERSECT
SELECT 3
UNION
SELECT 4
您可以看到您正在將 3SELECT條陳述句與運算子UNION和結合起來INTERSECT。
所有 3 個陳述句應回傳相同數量的列。
您的第一個宣告:
SELECT (SELECT 1 UNION SELECT 2 UNION SELECT 3)
實際上只回傳 1 行 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)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486186.html
上一篇:PostgreSQL獲取按名稱分組的結果,但按每個組的第一個元素的modified_datedesc排序
下一篇:將列值聚合到串列中會產生錯誤
