带有intersect和except的sqlite查询

时间:2013-06-07 07:01:45

标签: sqlite

这是一个我必须执行的sqlite查询,但我想先执行操作,然后再执行交叉操作。默认情况下,交叉点优先于except。有没有办法可以实现这个目标?

select a, b from table1 intersect select a,b from table2 except  select a, b from table3

我尝试将查询放在括号中,但它给我一个错误“[ near "(": syntax error ]”。

select a, b from table1 intersect (select a,b from table2 except  select a, b from table3)

1 个答案:

答案 0 :(得分:16)

复合查询不支持括号,但子查询执行:

SELECT a, b FROM table1
INTERSECT
SELECT * FROM (SELECT a, b FROM table2
               EXCEPT
               SELECT a, b FROM table3)

请注意,INTERSECT 的优先级高于EXCEPTactual rules为:

  

当三个或更多个简单的SELECT连接到复合SELECT时,它们从左到右分组。

由于INTERSECT是可交换的,您只需将此特定查询编写为:

SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3
INTERSECT
SELECT a, b FROM table1