带有intersect和except的sqlite查询

Sha*_*ank 9 sqlite

这是一个sqlite查询,我必须执行但我想先执行除操作然后交叉.默认情况下,交叉点优先于except.有没有办法可以做到这一点?

select a, b from table1 intersect select a,b from table2 except  select a, b from table3
Run Code Online (Sandbox Code Playgroud)

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

select a, b from table1 intersect (select a,b from table2 except  select a, b from table3)
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 16

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

SELECT a, b FROM table1
INTERSECT
SELECT * FROM (SELECT a, b FROM table2
               EXCEPT
               SELECT a, b FROM table3)
Run Code Online (Sandbox Code Playgroud)

请注意,INTERSECT具有优先级高于EXCEPT,则实际规则是:

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

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

SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3
INTERSECT
SELECT a, b FROM table1 
Run Code Online (Sandbox Code Playgroud)