2011-11-03 27 views
8

Tôi có hai bảng đơn giản: (đây chỉ là "id" cột)So sánh hai bảng SQL và trả về các id bị thiếu?

table1:

id 
1 
2 
3 
4 

table2:

id 
2 
4 

truy vấn sql nên so sánh hai bảng cho mất tích " id "trong bảng 2 và trả lại: 1,2

bất kỳ ý tưởng nào? :) TY

+0

Cho đến nay, tất cả các câu trả lời chỉ hiển thị những id trong bảng1 bị thiếu trong bảng 2. Bạn có bất kỳ nhu cầu cho một truy vấn mà sẽ trả lại tất cả những cái trong bảng 2 đang thiếu trong cột1 là tốt? –

+0

hi Paul, không có - một cách duy nhất là những gì tôi cần. – MilMike

+1

Từ khóa là 'EXCEPT'. MySQL không hỗ trợ hoạt động này, nhưng việc sử dụng nó trong các tìm kiếm sẽ trả về rất nhiều kết quả cho công việc-abouts và các phương pháp tiếp cận bổ sung. (Câu hỏi này xuất hiện theo thời gian.) –

Trả lời

26

Có một số cách để da mèo này:

SELECT table1.ID 
FROM  table1 
WHERE  table1.ID NOT IN(SELECT table2.ID FROM table2) 

Hoặc bạn có thể sử dụng một trái bên ngoài tham gia:

SELECT   table1.ID 
FROM   table1 
LEFT OUTER JOIN table2 ON table1.ID = table2.ID 
WHERE   table2.ID IS NULL 
+0

Tôi khuyên bạn nên sử dụng tiền tố tên bảng trong truy vấn đầu tiên để làm rõ trường ID nào của bạn, nếu chỉ vì lý do nó sẽ rất khó đọc nếu bạn mở rộng nó một lát sau. – Polynomial

+0

@ Đa thức, đã đồng ý và cập nhật. –

+1

năm trước. Nhưng vẫn còn giúp đỡ. May mắn tôi tìm thấy câu trả lời của bạn: D thx –

2
select t1.* 
from table1 t1 
left outer join table2 t2 on t1.id = t2.id 
where t2.id is null 
+1

@Raihan Vì LEFT OUTER có thể tham gia "không có hàng" từ T2 cho T1 nhất định (và đây là lynchpin cho phương pháp này). Các hàng bị thiếu là các hàng như vậy ... bị thiếu :-) –

+0

Tại sao các downvote? – RedFilter

1

Hãy thử điều này:

SELECT table1.id 
FROM  table1 
WHERE  table1.id NOT IN(SELECT table2.id FROM table2) 
Các vấn đề liên quan