Haben Sie eine Tabelle A, die zwei Spalten hat, jede aFremdschlüssel zu anderen Tabellen, in denen Schlüsseldaten gespeichert werden können. müssen diese Schlüsseldaten wie den Namen zurückziehen, der auf diesen Spalten basiert. Kann eine Link-Verknüpfung zu jeder Tabelle ausführen, dies wird jedoch viele Nullwerte enthalten, um dies zu vermeiden. Die Fremdschlüssel verwenden keine Nullen, da möglicherweise für jeden Wert ein Schlüssel vorhanden ist. Wir verwenden das System jedoch nicht auf diese Weise. Daher hat ein Feld einen Wert, das andere eine Null.
Beispiel:
Tabelle A
:
Index App Ten
----------------
1 123 0
2 124 0
3 0 125
4 0 126
Tabelle App
:
Index LName
---------------
123 Jones
124 Smith
Tabelle Ten
:
Index Lname
---------------
125 Doe
126 Williams
Was ist der richtige Weg, um diese zu verknüpfen, um die Tabelle basierend auf dem Index auszuwählen (ignorieren, wenn Null), und die erforderlichen Daten ohne linken Join und Nullwert zurückzugeben?
Gewünschte Ausgabe:
Index App Ten Lname
------------------------------
1 123 0 Jones
2 124 0 Smith
3 0 125 Doe
4 0 126 Williams
Antworten:
3 für die Antwort № 1Select A.Ind, A.App, A.Ten, coalesce(ap.LName,t.LName)
from A
LEFT JOIN App ap on ap.Ind = A.App
LEFT JOIN Ten t on A.Ten = t.Ind
Coalesce wählt den ersten Wert aus. Wenn der erste Wert Null ist, wird der zweite Wert ausgewählt
1 für die Antwort № 2
select a.[index], a.App, 0 as [Ten], App.Lname
from a
join App
on a.App = App.[Index]
where a.App <> 0
intersect
select a.[index], 0 as [App], a.Ten, Ten.Lname
from a
join Ten
on a.Ten = Ten.[Index]
where a.Ten <> 0
order by 1
Holen Sie sich die Werte von App und schneiden Sie sie dann mit Zehn
<> ignorieren Sie die 0 Werte