2016-06-30 10 views
0

Ich habe eine Klarstellung, um Oracle SQL-Verknüpfungen zu machen.Oracle SQL Join Abfrageabklärung

Szenario:

Ich habe zwei Tabellen.

T1 hat die folgende Struktur

cid, PID-, uid catId, catName, TID tName, TEvent

& T2 die folgende Struktur

cid uid, PID-

hat

PS: cId, uId und pId sind gemeinsame Spalten

Ich würde l ike eine SQL-Anweisung, die die mir folgende

1) Alle Datensätze auf T1 mit oder ohne Spiel in T2

2) Aufzeichnungen über T2, die nicht in T1 liefern würde.

Ex: -

T1:

cId  pId  uId  catId  catName  tId  tName tEvent 

1001 2010 dolp  11   Amber  1100  Rod  Login 
1001 2014 dolp  11   Amber  1100  Rod  Login 
1002 2010 dolp  13   Anders  1500  Oli  Login 
1003 2010 dolp  14   Rock  1501  Ret  Login 
1004 2010 dolp  15   Lila  1600  Win  Login 

T2:

cId  pId  uId  catId  catName  tId  tName tEvent 

1001 2010 dolp  11   Amber  1100  Rod  Login 
{Record in T1} 
1001 2014 dolp  11   Amber  1100  Rod  Login {Record in T1} 
1002 2010 dolp  13   Anders  1500  Oli  Login {Record in T1} 
1003 2010 dolp  14   Rock  1501  Ret  Login {Record in T1} 
1004 2010 dolp  15   Lila  1600  Win  Login {Record in T1} 
1001 2015 dolp  11   Amber  1100  Rod  Login {Record in T2} 
01:

cId  pId  uId 

1001 2010 dolp 
1001 2015 dolp 

Abfrage folgendes Ergebnis liefern sollte

Eine Hilfe dazu wird sehr geschätzt.

Danke.

+0

Bitte klären Sie, wie die Spalten catId, catName usw. in der letzten Zeile ihre Werte erhalten. Solche Spalten gibt es in T2 nicht. – wolfrevokcats

Antwort

2

1) alle Datensätze auf T1 mit oder ohne Spiel in T2

SELECT T1.* 
FROM T1 LEFT OUTER JOIN T2 ON T2.cId=T1.cId 
          AND T2.uId=T1.uId 
          AND T2.pId=T1.uId 
/

2) Datensätze auf T2, die nicht in T1 ist.

SELECT T2.* 
FROM T2 
WHERE NOT EXISTS 
      (SELECT 1 
       FROM T1 
       WHERE T1.cId=T2.cId 
       AND T1.uId=T2.uId 
       AND T1.pId=T2.uId) 
/
0

Verwenden Sie eine linke äußere Verbindung, wobei T2 die 1. Tabelle ist. Referenz unten zum Verständnis von Joins.

select a.cId,a.pId,a.uId,b.catId,b.catName,b.tId,b.tName,b.tEvent from T2 a right outer join T1 b 
on a.cId = b.cId and a.pId =b.pId ; 

Siehe: http://www.techonthenet.com/oracle/joins.php