Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   SELECT...WHERE IN (subconsulta con UNION) (https://www.clubdelphi.com/foros/showthread.php?t=69302)

Franinho 09-08-2010 12:31:34

SELECT...WHERE IN (subconsulta con UNION)
 
Buenos días chicos,

Tengo un pequeño problema y necesito ayuda, os comento:

Necesito hacer un IN (subconsulta). Dicha subconsulta está compuesta por un UNION. Ejemplo:

SELECT ..
FROM ..
WHERE ... IN (SELECT ..FROM ..UNION...SELECT ..FROM ..)

Me peta todo el rato en el UNION. Ambos SELECT son idénticos. Por lo que deduzco que no soporta un UNION dentro de un IN.

Para solucionar esto hago dos IN con el mismo condicional y poniendo en cada uno de ellos el SELECT que unía con el UNION. De esta manera tengo lo mismo sin el UNION.

Pero que pasa? Que si alguno de los dos devuelve null...toda la query me devuelve null. Por lo que no me sirve.

Se os ocurre alguna solución para solucionar esto, sin tener que hacer un SP?

Un cordial saludo
Fran =)

luisgutierrezb 09-08-2010 15:38:20

Y no sera por la condición en el where? recuerda que generalmente algo con null regresa null, otra cosa seria evitar el null con isnull o coalescense, iif, o algo segun el motor de base de datos

Franinho 09-08-2010 16:18:54

Como que por la condición del where?
Si lanzo la query con solo uno de los selects del union funciona perfectamente, a la que pongo union...falla y no me deja lanzar la query.

Entonces de ahí que deduzco que no puedo poner un UNION dentro de un IN.

Pero me sorprende ya que lo que pongo dentro del IN es solo una subconsulta bien construida.

Alguien sabe algo al respecto?

Saludines, :P

guillotmarc 09-08-2010 18:50:02

Cita:

Empezado por Franinho (Mensaje 372973)
Como que por la condición del where?
Si lanzo la query con solo uno de los selects del union funciona perfectamente, a la que pongo union...falla y no me deja lanzar la query.

Entonces de ahí que deduzco que no puedo poner un UNION dentro de un IN.

Pero me sorprende ya que lo que pongo dentro del IN es solo una subconsulta bien construida.

Alguien sabe algo al respecto?

Saludines, :P

Pues no se podrá usar un UNION dentro del IN. Este tipo de cosas se van depurando en cada nueva versión de Firebird.

Deberías poder conseguir lo mismo con :

SELECT ..
FROM ..
WHERE ... IN (SELECT ..FROM .condicion1.)
UNION
SELECT ..
FROM ..
WHERE ... IN (SELECT ..FROM .condicion2.)


La franja horaria es GMT +2. Ahora son las 21:42:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi