2012-04-13 22 views
6

Stworzyłem dwie tabele poniżej, a FK_TypeID jest w tym przypadku zerowalne. Chcę napisać zapytanie zwracające mi dołączyć z dwóch tabel.łączy dwie tabele z zerowalnym kluczem obcym?

jeśli FK_TypeID jest NULL przez pewien rząd, TypeName jest NULL. Nie jestem pewien, jak utworzyć takie oświadczenie dołączenia?

[Actions] 
ActionsID 
Date 
Message 
FK_TypeID //links to the table below 

[Type] 
TypeID 
TypeName 

Mój obecny statment wygląda to i po prostu przeskakuje nullFK_TypeID wiersze

SELECT  * 
FROM   Actions 
INNER JOIN  TypeName ON Actions.FK_TypeID = [Type].TypeID 

pomoc będzie bardzo mile widziane!

Odpowiedz

19

Wystarczy użyć LEFT JOIN

SELECT Actions.Date, Actions.Message, Type.TypeName 
FROM Actions 
    LEFT JOIN Type 
     ON Type.TypeID = Actions.FK_TypeID 

Jeśli mecz Actions nie zostanie znaleziony, aby związać go z Type, to wszystkie kolumny w Type będzie NULL.

Here is a good graphical visualization of the different types of joins in SQL

+0

Jakie czary to jest ?? zadziałało jak urok;) dziękuję! – Bonk

+0

"Czarownictwo" to strategia łączenia. +1 do Justina Pihony za dobre wykorzystanie opcji "LEFT JOIN", w której pierwsza tabela, do której się odwołuje (tabela LEFT), zwraca wszystkie wyniki, podczas gdy prawa tabela jest traktowana jako NULLABLE. Dokładnie o to pytał plakat. Dobra robota! –

0

Użyj sprzężenie zewnętrzne

SELECT Actions.Date, Actions.Message, Type.TypeName 
FROM Actions LEFT OUTER JOIN 
      Type ON Type.TypeID = Actions.FK_TypeID 
Powiązane problemy