Je pourrais trouver beaucoup de questions similaires mais pas de solution réelle à mon problème.
Ma requête 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)
Le code d'erreur que je reçois est
#1241 - Operand should contain 1 column(s)
Si je viens d'utiliser la requête entre parenthèses cela fonctionne et le résultat est
ID | COUNTER
0002159 | 1
Où est mon erreur? Merci beaucoup pour votre aide.
Le problème est que votre requête interne renvoie deux colonnes. Modifiez votre requête comme
UPDATE ADRESSEN
SET EMAIL = 0
WHERE ID = (SELECT ID
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE"
GROUP BY ID
HAVING COUNT(ID) = 1)
Cela devrait marcher.
Une dernière suggestion: êtes-vous sûr que votre requête interne renverra toujours une ligne? Si vous souhaitez que EMAIL soit défini sur la valeur 0 pour plusieurs ID renvoyés par une requête interne, je vous recommande d'utiliser "IN" à la place. de "=".
Votre sous-requête contient deux colonnes. Essaye ça:
UPDATE ADRESSEN
SET EMAIL = 0
WHERE ID = (SELECT ID
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE"
GROUP BY ID
HAVING COUNT(ID) = 1)
J'ai supprimé COUNT(ID)
pour que vous ne sélectionniez que l'ID et le mettiez à la place dans votre clause HAVING
.
De plus, à moins que vous ne soyez sûr que cette requête ne renvoie jamais plus d'une ligne, vous devez gérer la possibilité de doublons. Changez en WHERE ID IN
au lieu de WHERE ID =
ou limitez le nombre de résultats renvoyés par la requête. La méthode de limitation des résultats dépend de vos exigences - l'ajout de LIMIT 1
à la sous-requête fonctionnera, mais vous souhaiterez peut-être effectuer un tri ou utiliser MIN
/MAX
pour spécifier la ligne que vous obtenez.
Le problème est avec votre sous-requête:
SELECT ID, COUNT(ID) AS COUNTER FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" GROUP BY ID HAVING COUNTER = 1
vous essayez de le comparer à ID
mais vous retournez deux colonnes
WHERE ID IN (SELECT ID
FROM EIGENSCHAFTEN
WHERE Kategorie = "BOUNCE"
GROUP BY ID
HAVING COUNT(*) = 1 )
UPDATE ADRESSEN
SET EMAIL = 0
WHERE ID = (SELECT ID
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE"
GROUP BY ID
HAVING COUNT(*) = 1)