我有两个表“Admission”和“EmailAddress”。在录取过程中如果有人注册了“paperlessCommunication”,系统应该在EmailAddress表中添加他们的电子邮件。由于某些编码错误,一些注册“paperlessCommunication”的录取,在emailAddress表中有丢失的电子邮件地址。如何找到所有已注册无纸化通信但在电子邮件地址中丢失记录的记录... P.S。电子邮件地址表也有来自其他一些进程的电子邮件地址,我只对在无纸标志设置为“Y”的入场过程中缺少的一个感兴趣。
select * from Admission a where a.paperlessCommunication = 'Y'
select * from EmailAddress
两个表都有personid列。
有几种解决方案
解决方案#1
select *
from Admission A
where paperlessCommunication = 'Y'
and not exists (select 1 from EmailAddress ea where ea.emailaddress = A.emailaddress);
解决方案#2
select *
from Admission A
where paperlessCommunication = 'Y'
and emailaddress not in (select emailaddress from EmailAddress where emailaddress is not null);
解决方案#3
select *
from Admission A
left join EmailAddress EA on Em.emailaddress = A.emailaddress
where paperlessCommunication = 'Y'
and EA.emailaddress is null
一种方法是not exists
:
select *
from Admission a
where a.paperlessCommunication = 'Y' and
not exists (select 1 from EmailAddress ea where ea.emailaddress = a.emailaddress);
这假设电子邮件地址在两个表中。如果没有,其他一些ID当然可以,而且会被用来代替。