10

这是我必须执行的 sqlite 查询,但我想先执行除操作,然后再执行交集。默认情况下,intersection 的优先级高于 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)
4

1 回答 1

18

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

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

请注意,INTERSECT它的优先级高于EXCEPT实际规则为:

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

由于INTERSECT是可交换的,您可以简单地将这个特定查询编写为:

SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3
INTERSECT
SELECT a, b FROM table1 
于 2013-06-07T07:48:17.627 回答