日期:2014-05-16  浏览次数:20423 次

筛选两个表的非重复数据
    有两个表point、line分别代表点和直线, point表有id字段,line有startId和endId字段表示该直线起点和终点的id。由于建表时没有建立外键关联,导入的数据有可能startId或endId在point表里没有对应的记录,现在要做的是查出这些记录。
    首先想到的一个简单方法是用not in,如下:
select * from line t
where t.startId not in(select id from point)

    但是这样做速度慢、效率低,想到一个更好的方法:左外连接。A left join B on ... 将把A表所有的记录和B表的记录按照on的条件连接,如果B中没有满足条件的记录行则为null,选择这些null的值就可以达到目的:
select t1.* 
from line t1 left join point t2 
on t1.startId = t2.id 
where t2.id is null

    这样效率就快多了。终点按同样的方法也可以筛选出来了。