从另一个表中获取丢失的数据

问题描述 投票:1回答:2

我有两个表“Admission”和“EmailAddress”。在录取过程中如果有人注册了“paperlessCommunication”,系统应该在EmailAddress表中添加他们的电子邮件。由于某些编码错误,一些注册“paperlessCommunication”的录取,在emailAddress表中有丢失的电子邮件地址。如何找到所有已注册无纸化通信但在电子邮件地址中丢失记录的记录... P.S。电子邮件地址表也有来自其他一些进程的电子邮件地址,我只对在无纸标志设置为“Y”的入场过程中缺少的一个感兴趣。

select * from Admission a where a.paperlessCommunication = 'Y'

select * from EmailAddress

两个表都有personid列。

sql oracle
2个回答
1
投票

有几种解决方案

解决方案#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

2
投票

一种方法是not exists

select *
from Admission a
where a.paperlessCommunication = 'Y' and
      not exists (select 1 from EmailAddress ea where ea.emailaddress = a.emailaddress);

这假设电子邮件地址在两个表中。如果没有,其他一些ID当然可以,而且会被用来代替。

© www.soinside.com 2019 - 2024. All rights reserved.