3个表之间的SQL连接,获取不匹配的实体

时间:2018-01-23 10:14:19

标签: mysql sql join

我有3张桌子:

BATCH
facName lotName

LOT
lotName facID

FAC
ID facName

LOT 表包含批次,每个批次与fac相关,ID(LOT.facID=FAC.ID)。    BATCH 表包含facName和lotName对。这些对不一定正确,意味着它可以包含彼此不相关的facNamelotName(通过 LOT 表)。我想要得到错误的记录。

例如,对于此数据:

BATCH
facName lotName
fac1    lot1
fac1    lot2

LOT
lotName facID
lot1    1
lot2    2

FAC
ID      facName
1       fac1
2       fac2

我想要

BATCH
facName lotName
fac1    lot2

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您只需要一个JOIN

select facName, lotName
from batch b
join fac f on b.facName = f.facName
join lot l on b.lotName = l.lotName
where f.id != l.id

答案 1 :(得分:0)

在Oracle中我会做这样的事情: 我想你也可以在MySQL上做到这一点:

select *
from batch
where not exists ( select 1 from LOT 
      join FAC on FAC.id = LOT.facid 
      where FAC.facname = BATCH.facname 
      and LOT.lotname = BATCH.lotname)