gpt4 book ai didi

SQLite 支架 "don' t 工作”

转载 作者:IT王子 更新时间:2023-10-29 06:22:38 31 4
gpt4 key购买 nike

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

(SELECT * FROM A
UNION
SELECT * FROM B)
EXCEPT
(SELECT * FROM A
INTERSECT
SELECT * FROM B);

错误信息

Error: near line 1: near "(": syntax error

此查询适用于 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...

最佳答案

似乎 SQLite 不喜欢组合(子)查询(那些带有 UNIONUNION ALLEXCEPTINTERSECT 的查询) 被括起来:

  • 有效:

    (SELECT 1 AS v
    UNION
    SELECT 2)
    EXCEPT
    SELECT 1
  • 也不工作:

    SELECT 1 AS v
    UNION
    (SELECT 2
    EXCEPT
    SELECT 1)

(但是 SQL Server 中的 both work。)

在没有括号的情况下,各个子选择按顺序组合,即与其他一些 SQL 产品一样,任何运算符都没有固有的优先级。 (例如,这个

SELECT 1 AS v
UNION
SELECT 2
INTERSECT
SELECT 3

returns 1在 SQL Server 中(因为 INTERSECT 首先执行)和 nothing在 SQLite 中。)

唯一的解决方法似乎是使用您想要组合的部分作为子查询,like this :

SELECT *
FROM (
SELECT * FROM A
UNION
SELECT * FROM B
)
EXCEPT
SELECT *
FROM (
SELECT * FROM A
INTERSECT
SELECT * FROM B
)

关于SQLite 支架 "don' t 工作”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814663/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com