2017-03-22 100 views
0

我有两个查询正在运行,一个查找数据库中的匹配项,另一个查询更新数据库中的一列。查询完全一样,除了一个是SELECT语句,另一个是UPDATE语句。 WHERE子句中的语法在两个查询中完全相同,并且SELECT语句可以找到所有正确的结果,而不会出现任何问题或语法错误。第二个查询给出了这样的错误:在UPDATE查询中使用INTERSECT时出现SQL语法错误

ERROR: near "INTERSECT": syntax error

这是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。

回答

1

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

看起来好像你最初的目的最好用一个带有复杂WHERE子句的SELECT查询来处理,因为五个查询中的每一个查询都是针对同一张表检查不同的条件。

+0

Ahhhh,谢谢你,这是有道理的。我会重新写这个陈述,所以它是一个单独的WHERE。出于兴趣,如果我有多个UPDATE操作,我可以使用INTERSECT吗? – MikeyJ

+0

编号'INTERSECT','UNION','EXCEPT'等是只能在集合上工作的数学运算,并且您在SQL中描述集合的方式是通过'SELECT'。尝试采取非集合的交叉就像试图乘以句子。 – dmfay