如何在mysql中检索不匹配的结果

时间:2009-07-03 18:09:23

标签: mysql database join

我确信这很简单,但是如何在mysql中编写一个连接两个表的查询,然后只返回第一个表中不匹配的记录。我希望它像:

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

但这似乎没有多大意义!

1 个答案:

答案 0 :(得分:18)

您可以使用left outer join来完成此操作:

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

这样做需要您的第一个表格(table1),将其与您的第二个表格(table2)相关联,并为null列填写table2table1中与table2中的行不匹配的任何行。然后,它通过仅选择无法找到匹配的table1行来过滤掉。

或者,您也可以使用not exists

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

执行left semi join,基本上会执行与left outer join相同的操作。根据您的索引,一个可能比另一个更快,但两者都是可行的选项。 MySQL在optimizing the joins上有一些很好的文档,所以你应该检查一下..