这是我必须执行的 sqlite 查询,但我想先执行 except 操作,然后执行交集。默认情况下,intersection 的优先级高于 except。有什么办法可以做到这一点吗?
select a, b from table1 intersect select a,b from table2 except select a, b from table3
我尝试将查询放在方括号中,但它向我抛出错误“[ near “(”:语法错误 ]
。
select a, b from table1 intersect (select a,b from table2 except select a, b from table3)
最佳答案
复合查询不支持括号,但子查询支持:
SELECT a, b FROM table1
INTERSECT
SELECT * FROM (SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3)
请注意INTERSECT
不的优先级高于EXCEPT
,actual rules是:
When three or more simple SELECTs are connected into a compound SELECT, they group from left to right.
因为 INTERSECT
是可交换的,你可以简单地将这个特定的查询写成:
SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3
INTERSECT
SELECT a, b FROM table1
关于具有相交和除外的sqlite查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978128/