web-dev-qa-db-ja.com

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

私のエラーはどこにありますか?あなたの助けをどうもありがとう。

9
jacob

問題は、内部クエリが2つの列を返すことです。次のようにクエリを変更します

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

これはうまくいくはずです。

もう1つ提案がありますが、内部クエリが常に1行を返すことを確認しますか?内部クエリによって返される複数のIDに対して値0でEMAILを設定する場合は、「=」の代わりに「IN」を使用することをお勧めします。

11
sak

サブクエリには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を使用してどちらを指定するかを指定できます。あなたが得る行。

2
Ryan P

問題はサブクエリにあります:

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

IDと比較しようとしていますが、2つの列を返しています

1
James C
WHERE ID IN (SELECT ID 
                FROM EIGENSCHAFTEN 
                WHERE Kategorie = "BOUNCE" 
                GROUP BY ID
                HAVING COUNT(*) = 1 )
0
DRapp
UPDATE ADRESSEN
SET EMAIL = 0
WHERE ID = (SELECT ID
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID
HAVING COUNT(*) = 1)
0
Teja