Ich möchte bedingte Join von drei Tabellen machen. Linke Tabelle B verbinden und wenn der Schlüssel fehlt beitreten dann C. TabelleSQL bedingte Verknüpfung zu mehreren Tabellen in einem Schuss
+------+--+------+-------------+--+------+-------------+
| A.id | | B.id | B.OtherFish | | C.id | C.OtherFish |
+------+--+------+-------------+--+------+-------------+
| 1 | | 1 | B1 | | 1 | C1 |
| 2 | | | | | 2 | C2 |
| 3 | | 3 | B3 | | 3 | C3 |
| 4 | | | | | 4 | C4 |
| 5 | | 5 | B5 | | | |
| 6 | | 6 | B6 | | 6 | C6 |
+------+--+------+-------------+--+------+-------------+
Es gibt keine passenden Schlüssel für 2 und 4 in B und keine Tasten 5 in C Erwartete Ergebnisse:
+------+-----------+
| A.id | OtherFish |
+------+-----------+
| 1 | B1 |
| 2 | C2 |
| 3 | B3 |
| 4 | C4 |
| 5 | B5 |
| 6 | B6 |
+------+-----------+
die Abfrage ich benutze, ist:
select
A.id
,coalesce(B.id,C.id)
,coalesce(B.OtherFish,C.OtherFish)
from A
left join B
on A.id=B.id
left join C
on A.id=C.id
der Nachteil dieses Ansatzes ist, dass ich für alle Spalten verwenden verschmelzen ich aus verschiedenen Tabellen benötigen. Es ist ärgerlich, wenn es hundert Spalten in der Tabelle gibt. Es wäre wünschenswert, eine Koaleszenz für die gesamten Aliase wie coalesce(B,C)
zu machen.
Ist es möglich, es wie in einem Schuss zu machen:
left join B
on A.id=B.id
left join C
on A.id=(case when B.id is null then C.id end)
so dass in C.id würde ich alle guten Daten haben, ohne alle Spalten zu machen verschmelzen durch?
einige Beispieltabellendaten hinzufügen und das erwartete Ergebnis. – jarlh
Welche RDBMS verwenden Sie? –
Was ist los mit COALESCE? –