我有大量的邮递区号,它们是从两个不同的数据源组合而成的。

我的专栏看起来像:
邮政编码,地区,来源

这些值可能类似于:

76345, ShiPaTown, Source1
76345, ShiPaTown, Source2
12110, South Park, Source1
12110, Mars, Source2

我的目标是每个唯一的邮政编码仅包含一行,并且如果在Source1和Source2两者中都有邮政编码的记录,则始终从Source1中获取领土。

因此,先前的清单将减少为:
76345, ShiPaTown
12110, SouthPark

最佳答案

这是一个优先级查询。这是一种方法:

select zip, town
from t
where source = 'source1'
union all
select zip, town
from t
where source = 'source2' and
      not exists (select 1 from t as t2 where t2.zip = t.zip and t2.source = 'source1');

关于sql - 如果存在重复项,则根据另一列选择值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38149218/

10-10 05:47