2012-04-13 17 views
6

Creé dos tablas a continuación, y FK_TypeID es anulable en este caso. Quiero escribir una consulta devolviéndome el join de dos tablas.uniendo dos tablas con una clave externa con nulo?

si es FK_TypeID NULL para una determinada fila, el TypeName es también NULL. No estoy seguro de cómo crear una declaración conjunta.

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

[Type] 
TypeID 
TypeName 

Mi DECLARACIÓN actual se parece a esto y simplemente se salta NULLFK_TypeID filas

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

ayuda sería muy apreciada!

Respuesta

19

sólo tiene que utilizar un LEFT JOIN

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

Si no se encuentra una coincidencia con Actions para empatar con Type, a continuación, todas las columnas de Type serán NULL.

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

+0

Qué clase de brujería es esto ?? funcionó como un encanto;) ¡gracias! – Bonk

+0

La "brujería" es la estrategia de unión. +1 a Justin Pihony por mostrar un buen uso de "LEFT JOIN", donde la primera tabla a la que se hace referencia (la tabla IZQUIERDA) devuelve todos los resultados, mientras que la tabla correcta se trata como NULLABLE. Esto es exactamente lo que solicitó el afiche. ¡Buen trabajo! –

0

utilizará una unión externa

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