查找不重复的行

3 db2

我有两个 DB2 表。

表 1,称为 EmployeeFile

EmployeeFile 有以下列: EMP_ID, FNAME, LNAME, DOB

数据如下所示:

   EMP_ID, FNAME, LNAME, DOB
 - GB2342, John,  Smith, 1970-12-10
 - L3243C, Jane,  Jones, 1969-11-09
Run Code Online (Sandbox Code Playgroud)

表2,称为 OriginalData

OriginalData有以下列:INTERNAL_ID, FNAME, LNAME, DOB.

数据如下所示:

   INTERNAL_ID, FNAME, LNAME,    DOB
 - 6575678588,  Jane,  Jones,    1969-11-09
 - 1232145564,  Rob,   Mitchell, 1968-10-08
 - 3452345345,  John,  Smith,    1970-12-10
 - 6786478568,  John,  Smith,    1970-12-10
Run Code Online (Sandbox Code Playgroud)

我想说明的所有行EmployeeFile的该(FNAME, LNAME, DOB)组合只发生一次OriginalData

例如,如果我在上面显示的示例数据集上运行查询,它应该只返回以下行:

  • 简,琼斯,1969-11-09

我不想要“John Smith”,因为尽管他存在于 中EmployeeFile,但他的(FNAME, LNAME, DOB)组合在 中出现了两次OriginalData

我不想要“Rob Mitchell”,因为他不存在于EmployeeFile.

我该怎么做呢?

我能想到的唯一方法是非常丑陋:(FNAME, LNAME, DOB)从两个表中连接(使用一些分隔符,如 ~),对该列进行连接,通过 have 进行分组count(that concatenated column) = 1,然后在 上进行另一个选择EmployeeFile,仅选择(FNAME, LNAME, DOB)匹配解析该连接字符串的子字符串!

mus*_*cio 5

非常简单:

select e.* 
from EmployeeFile e
inner join
(
  select FNAME, LNAME, DOB
  from OriginalData
  group by FNAME, LNAME, DOB
  having count(1) = 1
) o
on (e.FNAME, e.LNAME, e.DOB) = (o.FNAME, o.LNAME, o.DOB)
Run Code Online (Sandbox Code Playgroud)