11

同様の質問をたくさん見つけることができましたが、私の問題に対する実際の解決策はありませんでした。

私の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

私のエラーはどこですか?どうもありがとうございました。

4

5 に答える 5

12

問題は、内部クエリが 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」を使用することをお勧めします。

于 2012-03-14T18:23:18.103 に答える
2

サブクエリには 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して取得する行を指定する必要がある場合があります。

于 2012-03-14T18:14:10.020 に答える
1

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

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

あなたはそれを比較しようとしていますIDが、2つの列を返しています

于 2012-03-14T18:13:50.793 に答える
0
UPDATE ADRESSEN
SET EMAIL = 0
WHERE ID = (SELECT ID
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID
HAVING COUNT(*) = 1)
于 2012-03-14T18:15:17.360 に答える
0
WHERE ID IN (SELECT ID 
                FROM EIGENSCHAFTEN 
                WHERE Kategorie = "BOUNCE" 
                GROUP BY ID
                HAVING COUNT(*) = 1 )
于 2012-03-14T18:13:46.870 に答える