【问题标题】:SQL Syntax error when using INTERSECT in UPDATE query在 UPDATE 查询中使用 INTERSECT 时出现 SQL 语法错误
【发布时间】:2017-08-14 20:26:14
【问题描述】:

我有两个查询正在运行,一个是在数据库中查找匹配项,另一个是更新数据库中的列。查询完全相同,除了一个是 SELECT 语句,另一个是 UPDATE 语句。 WHERE 子句中的语法在两个查询中完全相同,并且 SELECT 语句查找所有正确的结果,没有问题或语法错误。第二个查询给出了这个错误:

错误:“INTERSECT”附近:语法错误

这是 SELECT 查询:

SELECT * FROM StudentInfo 
    WHERE FirstLanguageToOffer = 'French' 
    OR SecondLanguageToOffer = 'French'
    OR ThirdLanguageToOffer = 'French'
    INTERSECT 
    SELECT * FROM StudentInfo WHERE Gender = 'Female'
    INTERSECT
    SELECT * FROM StudentInfo WHERE MaxPartners > CurrentPartners
    INTERSECT
    SELECT * FROM StudentInfo WHERE Preference ='Male' OR Preference = 'It doesnt matter'
    INTERSECT
    SELECT * FROM StudentInfo WHERE LanguageToPractice ='English'
    ORDER BY Priority
    LIMIT 1;

这是 UPDATE 查询:

UPDATE StudentInfo SET CurrentPartners = CurrentPartners -1  
    WHERE FirstLanguageToOffer = 'French' 
    OR SecondLanguageToOffer = 'French'
    OR ThirdLanguageToOffer = 'French'
    INTERSECT 
    SELECT * FROM StudentInfo WHERE Gender = 'Female'
    INTERSECT
    SELECT * FROM StudentInfo WHERE MaxPartners > CurrentPartners
    INTERSECT
    SELECT * FROM StudentInfo WHERE Preference ='Male' OR Preference = 'It doesnt matter'
    INTERSECT
    SELECT * FROM StudentInfo WHERE LanguageToPractice ='English'
    ORDER BY Priority
    LIMIT 1;

有谁知道什么可能导致这个问题? UPDATE 查询不支持 INTERSECT 操作吗?我正在使用 SQLite。

【问题讨论】:

    标签: sql sqlite sql-update


    【解决方案1】:

    INTERSECT 在更新方面没有任何意义。您的SELECT 查询实际上是五个 同时运行的独立查询,以返回五个独立结果集的交集。由于UPDATE 不生成结果集,因此尝试将其非结果与SELECT 查询的结果相交是错误的。

    看起来您最初的目的似乎会更好地使用带有复杂 WHERE 子句的单个 SELECT 查询,因为这五个查询中的每一个都针对同一个表运行检查不同的条件。

    【讨论】:

    • 啊,谢谢,这很有道理。我将重新编写语句,使其成为单个 WHERE。出于兴趣,如果我有多个 UPDATE 操作,我可以使用 INTERSECT 吗?
    • 没有。 INTERSECTUNIONEXCEPT 等等都是数学运算,只适用于集合,而您在 SQL 中描述集合的方式是通过 SELECT。试图取非集合的交集就像试图将句子相乘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多