SQL查询以使用重复的字段值排除同一表中的行

时间:2017-08-17 23:12:26

标签: sql

我会尽量简短。

我有一个表,我需要从Contacts中获取数据。

有一个公司字段,他们可以在公司A或公司B。

公司B中的所有联系人在公司A中都会有副本,可以与另一列LegacyID匹配。

我想要得到的是所有公司A行中没有公司B中有人具有相同LegacyID的行。

我已尝试AND LegacyID NOT IN (SELECT LegacyID FROM Contacts WHERE Company = 'B')以及AND NOT EXISTS (SELECT LegacyID FROM Contacts WHERE Company = 'B')

以上工作都没有,因为有26万个公司A联系人和96,000个公司B. NOT INNOT EXISTS在总行数少于50,000行时工作,但现在有了数据迁移,查询是超时或永远跑步。

由于

1 个答案:

答案 0 :(得分:2)

如果我理解正确,NOT EXISTS应该做你想做的事情:

select c.*
from contacts c
where companyId = 'A' and
      not exists (select 1
                  from contacts c2
                  where c2.legacyId = c.legacyId and c2.companyId = 'B'
                 );

为了提高性能,您需要contacts(legacyId, companyId)上的索引。