2012-10-19 26 views
5

Tôi có hai bảng được lựa chọn một tham gia,tham gia nếu nhập không tồn tại trong bảng thứ hai

Table1

PK Val1 Val2  FK 
1  a  b  10 
2  c  d  11 
3  e  f 
4  g  h  12 

Table2

PK Val3 
10  X 
11  Y 
12  Z 

Khi tôi làm một lựa chọn về vấn đề này cả hai bảng có tham gia bên trong và tất cả các Cột Val tôi đều nhận được kết quả này:

Result 
PK Val1 Val2  Val3 
1  a  b  X 
2  c  d  Y 
4  g  h  Z 

Như bạn có thể thấy mục nhập thứ ba bị thiếu. Những gì tôi muốn là một cái gì đó như thế này:

Result 
PK Val1 Val2  Val3 
1  a  b  X 
2  c  d  Y 
3  e  f 
4  g  h  Z 

Làm thế nào để tôi phải thay đổi joinquery

SELECT ... FROM Table1 INNER JOIN Table2 On Table1.FK = Table2.PK 

Cảm ơn bạn, Karl

Trả lời

10

sử dụng LEFT JOIN thay vì INNER JOIN

SELECT ... FROM Table1 LEFT JOIN Table2 On Table1.FK = Table2.PK 

về cơ bản, INNER JOIN retu rns ghi lại nơi có ít nhất một trận đấu trên bàn khác. Trong khi LEFT JOIN trả về tất cả các bản ghi trên bảng được chỉ định trên bên trái cho dù nó có khớp hay không.

btw, LEFT OUTER JOIN giống hệt LEFT JOIN

SQLFiddle Demo

+0

hoạt động tuyệt vời, cảm ơn bạn – Karl

+0

bạn đang chào đón @Karl! –

2

sử dụng trái phép nối ngoài

SELECT ... FROM Table1 LEFT OUTER JOIN Table2 On Table1.FK = Table2.PK 
-1
SELECT ... FROM Table1 CROSS JOIN Table2 
+0

tại sao 'CROSS JOIN'? – SkyDrive

Các vấn đề liên quan