2009-07-03 24 views
7

Tôi chắc chắn điều này là thẳng về phía trước, nhưng làm cách nào để viết truy vấn trong mysql nối hai bảng và sau đó chỉ trả về các bản ghi từ bảng đầu tiên không khớp . Tôi muốn nó được một cái gì đó như:Làm thế nào để lấy kết quả không phù hợp trong mysql

Select tid from table1 inner join table2 on table2.tid = table1.tid where table1.tid != table2.tid;

nhưng điều này dường như không làm cho rất nhiều ý nghĩa!

Trả lời

15

Bạn có thể sử dụng một left outer join để thực hiện điều này:

select 
    t1.tid 
from 
    table1 t1 
    left outer join table2 t2 on 
     t1.tid = t2.tid 
where 
    t2.tid is null 

Điều này không là phải mất bảng đầu tiên của bạn (table1), gia nhập nó với bảng thứ hai của bạn (table2), và điền vào null cho table2 các cột ở bất kỳ hàng nào trong table1 không khớp với một hàng trong table2. Sau đó, nó lọc ra bằng cách chỉ chọn các hàng table1 nơi không tìm thấy kết quả phù hợp.

Ngoài ra, bạn cũng có thể sử dụng not exists:

select 
    t1.tid 
from 
    table1 t1 
where 
    not exists (select 1 from table2 t2 where t2.tid = t1.tid) 

này thực hiện một left semi join, và về cơ bản sẽ làm điều tương tự rằng left outer join làm. Tùy thuộc vào các chỉ mục của bạn, một chỉ số có thể nhanh hơn chỉ mục khác, nhưng cả hai đều là các tùy chọn khả thi. MySQL có một số tài liệu tốt trên optimizing the joins, vì vậy bạn nên kiểm tra xem điều đó ..

+2

@ musoNic80 Ngoài ra, hãy kiểm tra http://www.codinghorror.com/blog/archives/000976.html –

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