2017-03-22 102 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