Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta con condicion distinta (https://www.clubdelphi.com/foros/showthread.php?t=65931)

mjjj 22-01-2010 15:30:29

Consulta con condicion distinta
 
Hola gente del foro, tengo una preguntita.

Utilizo Firebird 2.0. Tengo 2 tablas: AREA (ID:Integer y NOMBRE:String) y ESTRUCTURA (AREA:Integer).

Necesito una consulta que me devuelva todos los registros de la Tabla AREA, excluyendo aquellas area que están en la tabla ESTRUCTURA.

Tengo una idea,pero no me entrega lo que necesito.

Código SQL [-]
SELECT distinct A.nombre FROM area a
LEFT join estructura e on A.ID <> E.AREA

Ojala se le ocurra algo como solucionar esto.

Saludos

jhonny 22-01-2010 15:53:50

Una forma de hacerlo sería asi:

Código SQL [-]
SELECT DISTINCT A.nombre FROM area A
WHERE A.area NOT IN (SELECT E.area FROM estructura E)

Espero te sirva.

delphi.com.ar 22-01-2010 15:54:03

Te lo respondo con ANSI SQL, no se si funciona tal cual en FB:

Código SQL [-]
SELECT NOMBRE 
FROM AREA A
WHERE NOT EXISTS (SELECT 1 FORM ESTRUCTURA E WHERE A.ID =E.AREA)

Saludos!

Neftali [Germán.Estévez] 22-01-2010 15:56:16

Revisa la ayuda sobre SELECT..IN.
Posiblemente utilizando la negación obtengas lo que necesitas.

Código SQL [-]
USE pubs
SELECT pub_name
FROM publishers
WHERE pub_id in ('1389', '0736')

O algo como esto:

Código SQL [-]
Select * from Tabla1
where ID NOT in (Select ID FROM Tabla2)

roman 22-01-2010 16:25:25

Yo he encontrado que es más rápido un join:

Código SQL [-]
select * from area
left join estructura un estructura.area = area.id
where estructura.area is null

// Saludos

Neftali [Germán.Estévez] 22-01-2010 16:40:12

Cita:

Empezado por roman (Mensaje 351545)
Yo he encontrado que es más rápido un join

Cualquier cosa es más rápido que un SELECT..IN

Mejor esta.;)

jhonny 22-01-2010 16:50:23

Cita:

Empezado por Neftali (Mensaje 351551)
Cualquier cosa es más rápido que un SELECT..IN

Mejor esta.;)

De acuerdo, de hecho adoptaré esta forma.


La franja horaria es GMT +2. Ahora son las 14:14:04.

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