/ / Transact SQL Returning Data na podstawie klucza obcego - sql-server, tsql

Transact SQL Returning Data na podstawie klucza obcego - sql-server, tsql

Mieć tabelę A, która ma dwie kolumny, każda aklucz obcy do innych tabel, w których można przechowywać kluczowe dane. trzeba wycofać te kluczowe dane, takie jak nazwa na podstawie tych kolumn. Może zrobić lewe dołączenie do każdej tabeli, ale to będzie zawierać wiele wartości null, więc chcesz tego uniknąć. Klucze obce nie używają wartości null, ponieważ klucz może potencjalnie istnieć dla każdej wartości - ale nie używamy systemu w ten sposób, więc jedno pole ma wartość, a drugie zero.

Przykład:

Stół A:

Index  App   Ten
----------------
1     123    0
2     124    0
3      0     125
4      0     126

Stół App:

Index  LName
---------------
123     Jones
124     Smith

Stół Ten:

Index   Lname
---------------
125      Doe
126      Williams

Jaki jest właściwy sposób na ich połączenie, aby wybrać tabelę na podstawie indeksu (zignorować, jeśli zero) i zwrócić potrzebne dane bez lewostronnego połączenia i wartości zerowych?

Pożądane wyjście:

Index  App   Ten  Lname
------------------------------
1     123    0    Jones
2     124    0    Smith
3      0     125  Doe
4      0     126  Williams

Odpowiedzi:

3 dla odpowiedzi № 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 wybierze pierwszą wartość, jeśli pierwsza wartość jest zerowa, wybierze drugą wartość


1 dla odpowiedzi nr 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

Uzyskaj wartości z aplikacji, a następnie przecinaj je z dziesiątkami
<> zignoruj ​​0 vlues