Página 1 de 1

Comando EXISTS de MySQL

NotaPublicado: 2006-06-11 13:45 @615
por dacons
Hola de nuevo, mi problema es que necesito sacar las filas de la seients que no estan en la tabla entrades, cuando lo hago con exists me sale las que coinciden, pero cuando lo hago con not exists no me selecciona ninguna fila

select zona, fila, numero, nom
from espectacles esp, entrades e
where esp.codi_recinte=e.codi_recinte
and nom like 'El país de les Cent Paraules'
and NOT EXISTS (select zona, fila, numero
from seients s, espectacles esp
where esp.codi_recinte=s.codi_recinte
and nom like 'El país de les Cent Paraules')
order by zona

llevo horas dandole vueltas pero no hay forma de sacarlo, una ayudita porfa

NotaPublicado: 2006-06-12 05:17 @262
por macgregor
Código: Seleccionar todo
select zona, fila, numero, nom
from espectacles esp, entrades e
where esp.codi_recinte=e.codi_recinte
  and nom like 'El país de les Cent Paraules'
  and NOT EXISTS (select zona, fila, numero
                            from seients s, espectacles esp
                            where esp.codi_recinte=s.codi_recinte
                               and nom like 'El país de les Cent Paraules'
                            )
order by zona

Al ver esta consulta me surge una duda respecto al origen de "nom" ya que no indicas con ningun prefijo a que tabla pertenece.

Estaría bien saber que campos tiene cada tabla para no tener ningun tipo de dudas a la hora de responderte, sin embargo entiendo que en la consulta y en la subconsulta "non" hace referencia a la misma tabla (tabla espectacles).
Otra cosa a comentar, no se que SGBD utilizas, pero independientemente del que utilizas al no poner ningún caracter comodín en la expresion del 'LIKE' solo te devolverá las que coincidan exactamente, es decir esa expresión equivale a un '='.
En Oracle: esp.nom like '%Cent Paraules%'
En Access: esp.nom like "*Cent Paraules*" (supongo que en MSSqlServer tambien)
Si tu SGBD es otro busca cual es el carácter comodín.

Respecto a lo que pedías.... "sacar las filas de seients que no estan en la tabla entrades"

Si e.codi_recinte es la clave primaria de la tabla 'espectacles' y las tablas 'entrades' y 'seients' tienen ambas ese campo como clave foránea a 'espectacles' puedes hacer algo tan sencillo como

Código: Seleccionar todo
select *
from seients s
where s.codi_recinte not in (select distinct e.codi_recinte from entrades e)
and nom like '%Cent Paraules%'


Si esto no resuelve tu problema indica todos los campos de tus tablas y te propondré otra solución.

NotaPublicado: 2006-06-13 07:01 @334
por dacons
muchas gracias ya la resolvi