根据一个表中的唯一 ID 连接多个表

Posted

技术标签:

【中文标题】根据一个表中的唯一 ID 连接多个表【英文标题】:Joining Multiple tables based on a unique ID in one table 【发布时间】:2022-01-06 15:30:34 【问题描述】:

我想根据从第一个表中获取的 ID 连接多个表。

这是一个例子:

地点:

ID City_ID
1 92418

职业运动队:

City_ID Professional_Team_Count Participant_Count
92418 3 75

非职业运动队表:

City_ID Non_Pro_Team_Count Participant_Count
92418 25 750

我正在尝试返回一个看起来像这样的表 结果表

ID City_ID Professional_Team_Count Non_Pro_Team_Count Participant_Count
1 92418 3 NULL 75
1 92418 NULL 25 750

【问题讨论】:

您的两个“答案”都做出了相当重要的假设。你看到了吗?也许您甚至自己制作相同的,因为您的示例数据非常简单。当两个表都包含具有相同 LocationID 和 ProductID 值的行时会发生什么? 这不会发生,因为带有序列号的产品是唯一的。 【参考方案1】:
select loc.Id, loc.locationId, s.ProductId, s.SerialNumber, null as Quantity   
from Location loc
inner join Serialized s on loc.LocationId = s.locationId
where loc.Id = 1
union all
select loc.Id, loc.locationId, ns.ProductId, null, ns.Quantity   
from Location loc
inner join nonSerialized ns on loc.LocationId = ns.locationId
where loc.Id = 1

会的。您需要合并 2 组数据中的数据。

【讨论】:

使用union all 将避免额外处理以消除重复行。我并不绝对相信不会发生重复,但这取决于 OP 对其数据的了解。 @HABO,可能是但已经不会发生重复,除非它是非常糟糕的设计数据。无论如何,我编辑添加所有内容。【参考方案2】:

你需要做一个联合,从两个表中获取行:

select loc.ID, loc.LocationID, s.ProductID, s.SerialNumber, 
       null as Quantity
  from Location loc
  join Serialized s on s.ID = loc.ID
union all
select loc.ID, loc.LocationID, ns.ProductID, null as SerialNumber, 
       ns.Quantity
  from Location loc
  join NonSerialized ns on ns.ID = loc.ID

【讨论】:

【参考方案3】:

为避免多次加入Location,您可以将UNION ALL 放入派生表中

select
  loc.Id,
  loc.locationId,
  s.ProductId,
  s.SerialNumber,
  s.Quantity   
from Location loc
inner join (
    select
      s.locationId,
      s.SerialNumber,
      null as Quantity
    from Serialized s
    union all
    select
      ns.locationId,
      null,
      ns.Quantity
    from nonSerialized ns
) s on loc.LocationId = s.locationId
where loc.Id = 1;

【讨论】:

以上是关于根据一个表中的唯一 ID 连接多个表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQL 连接语句选择与链接表中的多个值匹配的记录?

单个查询中的 Postgresql 多个连接,其中连接的外键不存在于所有表中

使用复选框从 MySQL 中的多个表中选择数据,并根据复选框显示表字段

对同一个表中的多个列执行内连接

PostgreSQL 中多个表的完全外连接

如何对mysql表中的多个列进行连接