2012-03-14 16 views
9

Pude encontrar muchas preguntas similares pero no una solución real para mi problema.MySQL Error "Operand debería contener 1 columna"

Mi consulta 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) 

El código de error que recibo es

#1241 - Operand should contain 1 column(s) 

Si sólo tiene que utilizar la consulta en los paréntesis funciona y el resultado es

ID | COUNTER 
0002159 | 1 

¿Dónde está mi error? Muchas gracias por su ayuda.

+0

La sub consulta Ur devuelve dos columnas y no es válida ... – Teja

Respuesta

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

El problema es con su subconsulta:

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

que estamos tratando de compararlo con ID pero están regresando dos columnas

2

Su subconsulta contiene dos columnas. Prueba esto:

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

quité COUNT(ID) por lo que sólo seleccionar el ID, y poner ese lugar en su cláusula HAVING.

Además, a menos que esté seguro de que esta consulta nunca devolverá más de una fila, debe tener en cuenta la posibilidad de duplicados. Cambie a WHERE ID IN en lugar de WHERE ID = o limite el número de resultados devueltos por la consulta. El método para limitar los resultados dependerá de sus requisitos: agregar LIMIT 1 a la subconsulta funcionará, pero es posible que desee hacer una clasificación o use MIN/MAX para especificar qué fila obtiene.

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

El problema es que su consulta interna devuelve dos columnas. Modifique su consulta como

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

Esto debería funcionar.

Tengo una sugerencia más, ¿está seguro de que su consulta interna siempre devolverá una fila? Si desea que EMAIL se establezca con el valor 0 para múltiples ID devueltos por una consulta interna, le recomendaría que use "IN" en lugar de "=".

Cuestiones relacionadas