我在这里共使用了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中不存在的情况下却没有。我知道这是由于on条件返回data1,但我不知道如何在那里得到location_nbr。我有另一个列出所有位置编号的表格,但这些表格与项目表格无关,所以我无法加入。
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
答案 0 :(得分:2)
在没有看到表格结构的情况下,很难推荐一个精确的解决方案,但是,根据描述,您应该查看FULL OUTER JOINS,这将允许您包含在任何地方使用的所有product_id和location_id。 / p>
答案 1 :(得分:1)
有一个你想要的输出的例子可能会有所帮助,但在没有它的情况下我认为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;