简体   繁体   English

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

[英]Joining Multiple tables based on a unique ID in one table

I am wanting to join multiple tables based on a ID I fetch from the first table.我想根据从第一个表中获取的 ID 加入多个表。

Here is an example:这是一个例子:

Location:地点:

ID ID LocationID位置 ID
1 1 25 25
2 2 15 15
3 3 33 33

Serialized Table:序列化表:

LocationID位置 ID PoductID产品ID SerialNumber序列号
25 25 4545454 4545454 ABC123 ABC123
25 25 1231233 1231233 CBA321 CBA321
25 25 5432121 5432121 BCA213 BCA213

NonSerialized Table:非序列化表:

LocationID位置 ID PoductID产品ID Quantity数量
25 25 6786788 6786788 3 3
25 25 9898989 9898989 15 15
25 25 8786678 8786678 24 24

I am trying to return a table that looks like this Result Table我正在尝试返回一个看起来像这个结果表的表

ID ID Location_ID Location_ID Product_ID产品_ID Serial_Num序列号 Quantity数量
1 1 25 25 4545454 4545454 ABC123 ABC123 NULL NULL
1 1 25 25 1231233 1231233 CBA321 CBA321 NULL NULL
1 1 25 25 5432121 5432121 BCA213 BCA213 NULL NULL
1 1 25 25 6786788 6786788 NULL NULL 3 3
1 1 25 25 9898989 9898989 NULL NULL 15 15
1 1 25 25 8786678 8786678 NULL NULL 24 24
SELECT
    Location.ID AS ID,
    Location.LocationID AS Location_ID,
    *** NOT SURE how to fetch ProductID From Both Tables *** Product_ID, 
    Serialized.SerialNumber AS Serial_Num,      
    NonSerialized.Quantity AS Quantity,
    FROM Location
    INNER JOIN NonSerialized ON Location.LocationID = NonSerialized.LocationID
    INNER JOIN Serialized ON Location.LocationID = Serialized.LocationID
    WHERE Location.ID = 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
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

would do it.会做的。 You need to union data from 2 sets of data.您需要合并 2 组数据中的数据。

You need to do a union, to get the rows from both tables:你需要做一个联合,从两个表中获取行:

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

To avoid joining Location multiple times , you can put the UNION ALL inside a derived table为避免多次加入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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM