SQLite Bracket"不行"

use*_*798 8 sql sqlite

在SQLite版本3.7.12.1(控制台)中,此查询不起作用:

(SELECT * FROM A
UNION
SELECT * FROM B)
EXCEPT
(SELECT * FROM A
INTERSECT
SELECT * FROM B);
Run Code Online (Sandbox Code Playgroud)

错误信息

错误:靠近第1行:靠近"(":语法错误

此查询适用于SQL Server Management Studio.带括号的其他查询可以按预期工作.我错过了什么吗?

编辑:澄清:

SELECT * FROM A;     <-- works
(SELECT * FROM A);   <-- does not work [Error: near line 1: near "(": syntax error]
SELECT * FROM A WHERE A.id IN (SELECT B.id FROM B);   <-- works, so no fundamental issues with brackets and sqlite...
Run Code Online (Sandbox Code Playgroud)

And*_*y M 7

好像SQLite不喜欢组合(分)查询(那些具有UNION,UNION ALL,EXCEPTINTERSECT),以进行包围曝光:

(但两者都 适用于SQL Server.)

并且没有括号,各个子选择按顺序组合,即对于任何其他SQL产品中的任何运算符都没有固有的优先级.(例如,这个

SELECT 1 AS v
UNION
SELECT 2
INTERSECT
SELECT 3
Run Code Online (Sandbox Code Playgroud)

1在SQL Server中返回(因为INTERSECT首先执行)而在SQLite中没有任何内容.)

唯一的解决方法似乎是使用要组合的部分作为子查询,如下所示:

SELECT *
FROM (
  SELECT * FROM A
  UNION
  SELECT * FROM B
)
EXCEPT
SELECT *
FROM (
  SELECT * FROM A
  INTERSECT
  SELECT * FROM B
)
Run Code Online (Sandbox Code Playgroud)