根据一个表中的唯一 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 多个连接,其中连接的外键不存在于所有表中