我确信这很简单,但是如何在mysql中编写一个连接两个表的查询,然后只返回第一个表中不匹配的记录。我希望它像:
Select tid from table1 inner join table2 on table2.tid = table1.tid where table1.tid != table2.tid;
但这似乎没有多大意义!
答案 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
列填写table2
在table1
中与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上有一些很好的文档,所以你应该检查一下..