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
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
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

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
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.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC