2012-03-14 15 views
9

Potrei trovare molte domande simili ma nessuna soluzione reale per il mio problema.Errore MySQL "L'operando deve contenere 1 colonna"

mia query 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) 

Il codice di errore che ricevo è

#1241 - Operand should contain 1 column(s) 

Se mi basta usare la query in parentesi funziona e il risultato è

ID | COUNTER 
0002159 | 1 

Dov'è il mio errore? Grazie mille per il vostro aiuto.

+0

Ur Sub-query restituisce due colonne e non è in alcun modo valido ... – Teja

risposta

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

Il problema è con il subquery:

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

si sta cercando di confrontarlo con ID ma stanno tornando due colonne

2

tuo sottoquery contiene due colonne. Prova questo:

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

ho tolto COUNT(ID) in modo da selezionare solo l'ID, e mettere che invece nel vostro HAVING clausola.

Inoltre, se non si è sicuri che questa query non restituirà mai più di una riga, è necessario occuparsi della possibilità di duplicati. Passare a WHERE ID IN anziché a WHERE ID = oppure limitare il numero di risultati restituiti dalla query. Il metodo per limitare i risultati dipenderà dalle tue esigenze - l'aggiunta di LIMIT 1 alla subquery funzionerà, ma potresti voler fare un po 'di ordinamento o usare MIN/MAX per specificare quale riga ottieni.

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

Il problema è che la query interna restituisce due colonne. Modifica la tua query come

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

Questo dovrebbe funzionare.

Ho ancora un suggerimento, sei sicuro che la tua query interna restituirà sempre una riga? Se si desidera impostare EMAIL con il valore 0 per più ID restituiti dalla query interna, si consiglia di utilizzare "IN" anziché "=".

Problemi correlati