2014-03-03 74 views
2

我一共有4桌在这里工作:SQL多左加入多个标准

产品表: 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中存在的情况下,该查询没有成功。我知道这是由于条件回到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

很难跟随你问这里有什么,你将所有东西都加入到'item1'中,但'data2'和'data3'加入到'data1'字段中。在数据不在'data1'的情况下,你会使用什么标准来连接'data2'和'item1'? –

回答

2

没有看到你的表的结构,也难以推荐一个确切的解决方案,但是,根据描述,你应该看看全外连接,让您包括所有的product_id的和LOCATION_ID的是随处使用。

+0

这应该是一个评论,而不是一个答案.. –

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;