32 messaggi dal 20 settembre 2008
Ho la tabella A :

AChiave
ACampo

e la tabella B :

BChiave
BCampo

La tabella A ha questi record :

AChiave ACampo
1 Marco
2 Anna
3 Luigi
4 Mara

mentre B :

BChiave BCampo
1 Laurea
3 Diploma

Vorrei una query che mi restituisse i record di A che non stanno su B per ugual valore di AChiave e BChiave

Ossia:

2 Anna
4 Mara
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
gaerec wrote:
Ho la tabella A :

AChiave
ACampo

e la tabella B :

BChiave
BCampo

La tabella A ha questi record :

AChiave ACampo
1 Marco
2 Anna
3 Luigi
4 Mara

mentre B :

BChiave BCampo
1 Laurea
3 Diploma

Vorrei una query che mi restituisse i record di A che non stanno su B per ugual valore di AChiave e BChiave

Ossia:

2 Anna
4 Mara

semanticamente non ha molto senso.. la domanda e' uguale a: "ho 4 mele, se sottraggo 2 pere, quanto mele ottengo?"
al di la' di cio', che database stai utilizzando?
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
32 messaggi dal 20 settembre 2008
Devo far girare la query in Oracle 8i.
Applicativamente, o semanticamente, il problema è questa.

Ho due tabelle A e B, la chiave di A è anche uno dei campi di B, per ogni record di A
può esistere, oppure no, il suo corrispondente in B. Voglio estrarre i record di A che non
hanno un corrispondente in B.


"Andrea Montanari [MVP] [Staff]" <Andrea_Montanari> ha scritto nel messaggio news:350675@...
salve,
gaerec wrote:

Ho la tabella A :

AChiave
ACampo

e la tabella B :

BChiave
BCampo

La tabella A ha questi record :

AChiave ACampo
1 Marco
2 Anna
3 Luigi
4 Mara

mentre B :

BChiave BCampo
1 Laurea
3 Diploma

Vorrei una query che mi restituisse i record di A che non stanno su B per
ugual valore di AChiave e BChiave

Ossia:

2 Anna
4 Mara


semanticamente non ha molto senso.. la domanda e' uguale a: "ho 4 mele, se sottraggo 2 pere, quanto mele ottengo?"
al di la' di cio', che database stai utilizzando?
saluti


Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
http://www.hotelsole.com - http://www.hotelsolericcione.de

1.976 messaggi dal 27 luglio 2005
Contributi
salve,
gaerec wrote:
Devo far girare la query in Oracle 8i.
Applicativamente, o semanticamente, il problema è questa.

Ho due tabelle A e B, la chiave di A è anche uno dei campi di B, per ogni record di A
può esistere, oppure no, il suo corrispondente in B. Voglio estrarre i record di A che non
hanno un corrispondente in B.

in Transact-SQL potresti probabilmente utilizzare l'operatore EXCEPT, che non so se sia disponibile in PL/SQL e la relativa estrazione sarebbe similare a
SELECT Chiave, Col
FROM t1
EXCEPT
SELECT Chiave, Col
FROM t2;

puoi pero' utilizzare tranquillamente anche una LEFT JOIN sulla tabella a te interessante con la tabella di comparazione che estragga le sole righe per le quali non esista un riferimento nella tabella di comparazione, similarmente a

SELECT t1.Chiave, t1.Col
FROM t1
LEFT JOIN t2 ON t2.Chiave = t1.Chiave
WHERE t2.Chiave IS NULL;

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
32 messaggi dal 20 settembre 2008
Grazie.


"Andrea Montanari [MVP] [Staff]" <Andrea_Montanari> ha scritto nel messaggio news:350717@...
salve,
gaerec wrote:

Devo far girare la query in Oracle 8i.
Applicativamente, o semanticamente, il problema è questa.

Ho due tabelle A e B, la chiave di A è anche uno dei campi di B, per ogni
record di A
può esistere, oppure no, il suo corrispondente in B. Voglio estrarre i record di A che non
hanno un corrispondente in B.


in Transact-SQL potresti probabilmente utilizzare l'operatore EXCEPT, che non so se sia disponibile in PL/SQL e la relativa estrazione sarebbe similare a
SELECT Chiave, Col
FROM t1
EXCEPT
SELECT Chiave, Col
FROM t2;

puoi pero' utilizzare tranquillamente anche una LEFT JOIN sulla tabella a te interessante con la tabella di comparazione che estragga le sole righe per le quali non esista un riferimento nella tabella di comparazione, similarmente a

SELECT t1.Chiave, t1.Col
FROM t1
LEFT JOIN t2 ON t2.Chiave = t1.Chiave
WHERE t2.Chiave IS NULL;

saluti


Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz - http://italy.mvps.org
http://www.hotelsole.com - http://www.hotelsolericcione.de

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.