2012-03-14 58 views
9

我可以找到很多類似的問題,但對我的問題沒有真正的解決方案。MySQL錯誤「操作數應該包含1列」

我的SQL查詢:

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID, COUNT(ID) AS COUNTER 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNTER = 1) 

我收到的錯誤代碼是

#1241 - Operand should contain 1 column(s) 

如果我只是使用它的工作原理,括弧內查詢和結果是

ID | COUNTER 
0002159 | 1 

我的錯誤在哪裏? 非常感謝您的幫助。

+0

Ur子查詢返回兩列,並沒有辦法有效... – Teja 2012-03-14 18:14:20

回答

0
WHERE ID IN (SELECT ID 
       FROM EIGENSCHAFTEN 
       WHERE Kategorie = "BOUNCE" 
       GROUP BY ID 
       HAVING COUNT(*) = 1) 
1

問題是與你的子查詢:

SELECT ID, COUNT(ID) AS COUNTER FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" GROUP BY ID HAVING COUNTER = 1 

你試圖把它比作ID但返回兩列

2

你的子查詢中包含兩列。試試這個:

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(ID) = 1) 

我刪除COUNT(ID)所以你只能選擇ID,並把那不是你的HAVING條款。

此外,除非您確定此查詢永遠不會返回多行,否則您需要處理重複的可能性。請更改爲WHERE ID IN而不是WHERE ID =,或者限制查詢返回的結果數量。限制結果的方法將取決於您的要求 - 將LIMIT 1添加到子查詢中可行,但您可能需要執行一些排序或使用MIN/MAX來指定您獲得的行。

0
UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(*) = 1) 
10

問題是你的內部查詢返回兩列。修改您的查詢,如

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(ID) = 1) 

這應該有效。

我還有一個建議,你確定你的內部查詢總是會返回一行嗎? 如果您希望爲內部查詢返回的多個ID設置值爲0的EMAIL,我會建議您使用「IN」而不是「=」。

相關問題