UNION gleiche Daten eine Spalte Rest in mehreren Spalten

JayCole

Aktiver Benutzer
Beiträge
35
Guten Morgen zusammen,
ein bissl Erfahrung habe ich mit SQL schon, aber jetzt gerade stehe ich voll auf dem Schlauch und weiß mir selbst mit Google nicht zu helfen.
Auch wenn es um mehrere Tabellen geht, ich mache es am Beispiel von zwei (hoffentlich) einfach:
Tabelle 1 enthält zwei Spalten: Postleitzahl und ZuständigkeitA
Tabelle 2 enthält zwei Spalten: Postleitzahl und ZuständigkeitB
Nun brauche ein ein VIEW mit drei Spalten: Postleitzahl, ZuständigkeitA, ZuständigkeitB
Die Spalte Postleitzahl ist in beiden Tabellen gleich.
Mein Ansatz war UNION, für die Spalte der Postleistzahlen ja auch ok, aber ich bekomme die beiden Zuständigkeiten nicht nebeneinander dargestellt.
Kann mir bitte jemand einen Schubser in die richtige Richtung geben?
Vielen Dank schon im Voraus für Eure Zeit!
 
Werbung:
Wobei, ich sehe gerade, dass die Postleitzahlen-Spalten nicht komplett identisch sind. Teilweise wurden "nicht benötigte" PLZ ausgelassen. D.h. die PLZ-Spalte müsste tatsächlich auch noch verschmolzen werden und die entsprechend zugehörigen Zuständigkeiten den PLZ zugeordnet. :confused:
 
Nun brauche ein ein VIEW mit drei Spalten: Postleitzahl, ZuständigkeitA, ZuständigkeitB

Klingt nach einem simplen JOIN:

Code:
select plz, t1.zustaendigkeit_a, t2.zustaendigkeit_b
from table_1 t1
  full join table_2 t2 using (plz);
Das using (plz) hat den netten Nebeneffekt, dass in der Spalte PLZ in der SELECT Liste immer der Wert aus der Tabelle steht in der er gefunden wurde. Wichtig dabei ist, dass die Spalte in der SELECT Liste ohne Tabellenalias referenziert wird.

Das ist im Prinzip äquivalent zu:

Code:
select coalesce(t1.plz, t2.plz), t1.zustaendigkeit_a, t2.zustaendigkeit_b
from table_1 t1
  full join table_2 t2 using t1.plz = t2.plz;
 
Hallo Castorp,

vielen Dank für die schnelle Antwort :)

Das erste Beispiel verstehe ich (glaube ich), kann es nach meinem Verständnis aber nicht anwenden, da streng genommen die PLZ-Spalten in meinen Tabellen unterschiedlich heißen (pniplz und pnsplz).

Das zweite Beispiel klingt vielversprechend, führt aber zu einem Fehler:
ERROR: FEHLER: Syntaxfehler bei »t1«
LINE 3: FULL JOIN table_2 t2 USING t1.pniplz = t2.pnsplz;
 
Ah, Moment, habe USING durch ON ersetzt, jetzt tut sich was :D
Ich schau mir das Ergebnis in Ruhe an, ist aber schon eine Riesenhilfe oder gar die Lösung!
DANKESCHÖN!
 
Code:
edb=*# select * from plz1;
  plz  |   name   
-------+-----------
 01723 | Wilsdruff
 01067 | Dresden
(2 rows)

edb=*# select * from plz2;
  plz  |   name   
-------+-----------
 01723 | Wilsdruff
 01662 | Meißen
(2 rows)

edb=*# select coalesce(plz1.plz,plz2.plz), plz1.name, plz2.name from plz1 full join plz2 on plz1.plz=plz2.plz;
 coalesce |   name    |   name   
----------+-----------+-----------
 01723    | Wilsdruff | Wilsdruff
 01067    | Dresden   |
 01662    |           | Meißen
(3 rows)

edb=*#
 
Werbung:
Hallo akretschmer,
das bestätigt, vielen Dank auch an Dich!!!
Sehr geil, coalesce kannte ich noch nicht, wieder was dazugelernt :D
 
Zurück
Oben