Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Exception Join (https://www.clubdelphi.com/foros/showthread.php?t=41679)

jonmendi 22-03-2007 12:07:24

Exception Join
 
Hola!
quiero hacer una sql que con estos datos
Código:


Tabla A                  TablaB
CampoA  CampoB            CampoA  CampoB
A          1              A      1
A          2              C      3
C          3              D      2
D          2

me de el registro A 2 (el segundo de la Tabla A ).
Es algo así a hacer justo lo contrario a un INNER JOIN:


Código SQL [-]
Select * from TablaA A inner join TablaB B 
  on A.CampoA = B.CampoA and A.CampoB = B.CampoB




Este me daría los otros tres registros. Justo quiero lo contrario a esto. En AS/400 hay una sentencia que es Exceptioon Join, pero en delphi me da error.
¿Alguien sabe como hacerlo?

Gracias!
Jon

Uso delphi3, paradox

basti 22-03-2007 13:50:25

Supongo que lo que necesitas es una consulta que te muestre los registros de la tabla A que no tengan registros relacionados en la tabla B.

Si tienes un campo único en la tabla A (un Id o Código), la consulta es más o menos sencilla:
Código SQL [-]
  Select * from TablaA where Id not in (Select Id from TablaA A inner join TablaB B on A.CampoA = B.CampoA and A.CampoB = B.CampoB)
Vamos, que le damos la vuelta a la consulta con el operador "not in".

Si ese no es el caso, se complica un poco (no mucho):
Código SQL [-]
  Select * from TablaA as A where (select count(CampoA) from TablaB as B where B.CampoA = A.CampoA and B.CampoB = A.CampoB) = 0

jonmendi 22-03-2007 18:57:45

gracias basti!

pero la primera sql no funciona pq la select del inner join nos devuelve el valor A para el campoA, por lo que al hacer el not in , pues no devuelve nada.
(la select del inner join devolvería los registros A, C, D, y claro nos encuentra el A, con lo que no funciona.)

la segunda sql tampoco funciona. Además no veo muy claro el uso del count.

Muchas gracias de todos modos.
Jon

basti 22-03-2007 19:08:10

Acabo de crear las tablas con los ejemplos que pusiste arriba y funcionan ambas consultas. En ambos casos me devuelve un registro con los valores CampoA = 'A' y CampoB= 2.

El count lo que hace en la segunda consulta es contar cuantos registros hay en la tablaB que también estén en la tablaA. Si es igual a 0 es que no hay registros en la tablaB iguales al de la TablaA.


La franja horaria es GMT +2. Ahora son las 17:12:29.

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