繁体   English   中英

具有多个条件的SQL多重左联接

[英]SQL Multiple Left-Join with multiple criteria

我在这里总共使用4张桌子:

产品表:product_id,product_desc

数据1 product_id,location_id,data1

数据2 product_id,location_id,data2

数据3 product_id,location_id,data3

我遇到的问题不是每个数据表都包含每个product_id或location_id。 我的查询设法为第一个数据表正确提取数据,但在data1中不存在product_id或location_id但在data2中存在product_id或location_id的情况下,则无法进行查询。 我知道这是由于on条件返回到data1引起的,但是我不确定如何在其中获取location_nbr。 我确实有另一个列出所有位置编号的表,但这些位置编号与item表没有任何关联,因此我无法加入该表。

select 
    item1.*
    ,coalesce(data1.location_id, data2.location_id, data3.location_id) as location_id
    ,data1.data1
    ,data2.data2
    ,data3.data3

from item1
    LEFT OUTER JOIN data1 AS data1
    ON data1.product_id = item1.ksn_id

    LEFT OUTER JOIN data2 AS data2
    ON data2.product_id = item1.ksn_id
    and data2.location_nbr = data1.location_nbr

    LEFT OUTER JOIN data3 AS data3
    ON data3.product_id = item1.ksn_id
    and data3.locn_nbr = data1.location_nbr

在没有看到表结构的情况下,很难推荐一个确切的解决方案,但是,根据描述,您应该查看FULL OUTER JOINS,这将允许您包括所有在任何地方使用的product_id和location_id。

举例说明所需的输出可能会有所帮助,但是如果没有,我认为UNION或UNION ALL可能会满足您的要求:

SELECT Item1.*
     , Data1.*
FROM Item1
LEFT JOIN 
     Data1
  ON Data1.ItemID = Item1.ksn_id
UNION
SELECT Item1.*
     , Data2.*
FROM Item1
LEFT JOIN 
     Data2
  ON Data2.ItemID = Item1.ksn_id
UNION
SELECT Item3.*
     , Data3.*
FROM Item1
LEFT JOIN 
     Data3
  ON Data3.ItemID = Item1.ksn_id;

暂无
暂无

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

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