[Oracle9] Tabellen "verbinden"

SQLstruggle

Grünschnabel
Hallo Leute,

ich moechte mehrere Tabellen miteinander verbinden. Und zwar auf eine vielleicht etwas ungewoehnliche Weise.
Ich habe eine Referenztabelle Tab1 und zwei oder mehrere Tabellen zum Verbinden D1, D2 ...

Code:
Tab1    D1            D2
locID   locID value   locID value 
1       1     b       2     aa
2       2     a       3     bb
3
4
5
Als Ergebnis soll herauskommen:
Code:
Tab1.locID   D1.value   D2.value
1            a          <null>
2            b          aa
3            <null>     bb
Irgend eine Idee, wie man das hinbekommen koennte? Das Problem scheint hauptsaechlich darin zu liegen, die Werte aus verschiedenen Tabellen (bei mir sind es views) in eine Zeile zu bekommen.
Vielen Dank schon mal.
 
Hi,
so vielleicht?

Code:
SELECT tab1.locID, D1.value, D2.value FROM tab1, D1, D2 WHERE tab1.locID = D1.locID OR tab1.locID = D2.value
 
Hi niggo,

danke fuer Deine Antwort. Aber nein, das funktioniert nicht. Du meintest wahrscheinlich ... = D2.locID am Ende Deines Codes, sonst wuerde es gar keinen Sinn machen. Das (korrigierte) Ergebnis Deiner Abfrage sieht so aus:

1 | a | aa
1 | a | bb
2 | a | aa
2 | b | aa
2 | b | bb
3 | a | bb
3 | b | bb

Etwas naeher kommen wir der Sache so:
Code:
(select test_tab1.loc_ID, test_D1.value
   from test_tab1, test_D1
  where test_tab1.loc_ID = test_D1.loc_ID
)
union  
(select test_tab1.loc_ID, test_D2.value
   from test_tab1, test_D2
  where test_tab1.loc_ID = test_D2.loc_ID
)
Aber dann gibt es immer noch zwei Zeilen fuer die Location '2' und nur eine Spalte fuer die Werte:

1 | a
2 | aa
2 | b
3 | bb

Hat jemand eine andere Idee?
 
Versuchs mal mit 2 LEFT JOINS:

Code:
  1  SELECT Tab1.LocID, D1.VALUE, D2.VALUE
  2  FROM TAB1 LEFT JOIN D1
  3  ON TAB1.locID = D1.locID
  4  LEFT JOIN D2
  5  ON TAB1.locID = D2.locID
  6  WHERE D1.VALUE || D2.VALUE IS NOT NULL
  7* ORDER BY 1

     LOCID VALUE      VALUE
---------- ---------- ----------
         1 b
         2 a          aa
         3            bb

3 Zeilen ausgewählt.

Die Bedingung "WHERE D1.VALUE || D2.VALUE IS NOT NULL" verhindert, dass du Einträge aus Tab1 bekommst, wenn keine Werte in D1 oder D2 vorhanden sind.
 
Zuletzt bearbeitet:
Hi Exceptionfault,

das sieht schon mal nicht schlecht aus! Aber irgendwie bekomme ich bei mir nur die ersten beiden Zeilen ausgegeben, nicht aber die dritte :eek:
Bist Du sicher, dass das bei Dir so funktioniert (hast Du es ausprobiert)? Woran koennte es dann liegen, dass ich die letzte Zeile nicht angezeigt bekomme bzw. was muesste man an der Abfrage noch veraendern :confused: So ganz blicke ich Deinen Code noch nicht ...

Vielen Dank schon mal und in Hoffnung auf eine [klaerende] Antwort,
SQLstruggle
 

Neue Beiträge

Zurück