【问题标题】:SQL join between 3 tables, get the unmatched entities3个表之间的SQL连接,获取不匹配的实体
【发布时间】:2018-01-23 10:14:18
【问题描述】:

我有 3 张桌子:

BATCH
facName lotName

LOT
lotName facID

FAC
ID facName

LOT 表包含批次,每个批次都通过 ID (LOT.facID=FAC.ID) 与 fac 相关。 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

有什么想法吗?

【问题讨论】:

  • 您如何识别fac1lot2 无关?
  • 按“LOT”表。 lot2 的 facID 为“2”(而不是“1”)

标签: mysql sql join


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

【讨论】:

    【解决方案2】:

    在 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)
    

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      相关资源
      最近更新 更多