返回一个MySQL表中存在的项目,这些项目不存在于另一个MySQL表中,需要考虑2列

时间:2013-02-20 17:16:21

标签: mysql

我想返回table1中所有活动的邮政编码,并且在table2中没有任何共享相同坐标(lat,lng)的项目。 即在下面的回报:

AB11AC

我知道有几种方法只是检查一列,但不知道如何适应2列。我应该在查询中将两列连接在一起还是有更有效的方法?我的表每个都有大约200万个条目。

表1:

postcode  lat  lng active
-------------------------
AB11AA   55   1    Y
AB11AB   56   1    Y
AB11AC   57   1    Y

表2:

postcode  lat  lng active
--------------------------
AB11AA   55   1   Y
AB11AD   56   1   Y
AB11AE   59   1   Y

1 个答案:

答案 0 :(得分:1)

您可以使用LEFT JOIN

select *
from table1 t1
left join table2 t2
  on t1.lat = t2.lat
  and t1.lng = t2.lng
where t1.active = 'Y'
  and t2.postcode is null

请参阅SQL Fiddle with Demo

或者您可以在NOT EXISTS子句中使用WHERE

select *
from table1 t1
where t1.active = 'Y'
  and not exists (select *
                  from table2 t2
                  where t1.lat = t2.lat
                    and t1.lng = t2.lng)

请参阅SQL Fiddle with Demo