2012-04-13 32 views
6

Tôi đã tạo hai bảng bên dưới và FK_TypeID không thể sử dụng được trong trường hợp này. Tôi muốn viết một truy vấn trả lại cho tôi số tham gia của hai bảng.tham gia hai bảng có khóa ngoài không thể dùng được?

nếu FK_TypeIDNULL cho một hàng nhất định, TypeName cũng là NULL. Tôi không chắc chắn làm thế nào để đi về việc tạo ra tuyên bố tham gia như vậy?

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

[Type] 
TypeID 
TypeName 

Statment hiện tại của tôi trông như thế này và nó chỉ đơn giản là bỏ qua NULLFK_TypeID hàng

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

Trợ giúp sẽ được đánh giá rất nhiều!

Trả lời

19

Bạn chỉ cần sử dụng một LEFT JOIN

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

Nếu một trận đấu để Actions không được tìm thấy để buộc nó với Type, sau đó tất cả các cột trong Type sẽ NULL.

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

+0

phù thủy loại gì đây là ?? nó làm việc như một say mê;) cảm ơn bạn! – Bonk

+0

"Phù thủy" là chiến lược tham gia. +1 để Justin Pihony cho thấy một sử dụng tốt của "LEFT JOIN", nơi bảng đầu tiên được tham chiếu (bảng LEFT) trả về tất cả các kết quả, trong khi bảng bên phải được coi là NULLABLE. Đây chính xác là những gì mà người đăng ký yêu cầu. Làm tốt lắm! –

0

Sử dụng một OUTER JOIN

SELECT Actions.Date, Actions.Message, Type.TypeName 
FROM Actions LEFT OUTER JOIN 
      Type ON Type.TypeID = Actions.FK_TypeID 
Các vấn đề liên quan