/ / Transact SQL Zurückgeben von Daten basierend auf dem Fremdschlüssel - SQL-Server, Tsql

Transact SQL Zurückgeben von Daten basierend auf Fremdschlüssel - sql-server, tsql

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 № 1
Select 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