0

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

AB11AC

我知道有几种方法只检查一列,但不确定如何适应两列。我应该在查询中将两列连接在一起还是有更有效的方法?我的每个表都有大约 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
4

1 回答 1

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

或者您可以NOT EXISTSWHERE子句中使用 a:

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

于 2013-02-20T17:22:47.137 回答