2014-03-03 76 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;