2010-10-03 9 views
6

Lo que pasa es que devuelve una fila.SQL: ERROR: más de una fila devuelta por una subconsulta utilizada como expresión

Aquí está la cosa.

SELECT... 

FROM... 

WHERE... 

GROUP BY... 

HAVING randomNumber > (SELECT value FROM.....) 

Cuando tengo signos como =,> siempre me devuelve este error. Cuando hago IN no lo hace.

¿No se supone que debe usar signos de comparación cuando se compara con otra tabla?

+3

IN espera que se devuelvan 1 o más valores de la subselección. Los operadores de comparación esperan solo un único valor de retorno. Tu problema es que estás usando comparación en múltiples resultados de subselección. –

Respuesta

6

cuando se escribe:

SomeValue IN (SELECT ...) 

es equivalente a usar:

SomeValue = ANY (SELECT ...) 

No utilice la segunda notación - pero ilustra un punto. Cuando el SELECT devuelve más de un valor, debe usar ANY o ALL con el comparador. Cuando omite CUALQUIERA o TODAS, debe tener un SELECTO que devuelva exactamente un valor.

+0

¿Por qué recomienda no utilizar 'SomeValue = ANY (SELECT ...)'? –

+0

Porque la ortografía familiar es 'SomeValue IN (SELECT ...)'. Las personas (creo que) saben lo que eso significa sin buscarlo; probablemente tengan que pensar mucho para llegar a la misma conclusión si usas '= ANY'. Las versiones negadas son aún más difíciles: '! = ANY' y'! = ALL' son un verdadero problema para clasificar. –

0

Puede especificar varios valores con el operador IN. Si está usando >, = , < etc. intente usar esto:

HAVING randomNUmber > (SELECT MAX(value) FROM ......) 
Cuestiones relacionadas