2017-07-31 83 views
0

項目加入基於SQL Server中的列值表

id key code description 
------------------------------ 
1 1 misc miscellaneous 
2 1 med  medicine  

其他表:

id code description 
------------------------ 
1 misc1 miscellaneous 
2 misc1 miscellaneous 

醫學表:

id code  description 
--------------------------- 
1 medicine1 medicine 
2 medicine1 medicine 

我有這個表結構;我的主表是Item表,我想根據主表中的列值將主表與其他表聯接起來。確定要加入的表的列是code。如果代碼是misc加入misc table如果值是med加入medicine table

我知道表的基本JOIN

SELECT * 
FROM item 
INNER JOIN miscellaneous ON item.key = miscellaneous.id 

但我不知道如何加入時,有將指向哪個表JOIN

+0

這是真正的有線結合其他&醫學表列!你實際上想要達到的是什麼? – Rahul

+0

能夠根據主表中一列的值加入表格。我有一個代碼列會告訴在我的例子中加入哪個表,如果代碼是misc JOIN與雜項表,但如果代碼是MED JOIN與藥物表@Rahul – Martin

+0

一些條件連接的選項[條件連接](https ://sqloverover.com/questions/26518526/conditional-join-statement-sql-server) – SQLAndOtherStuffGuy

回答

2

可以使用left join的條件。你的問題是什麼應該帶些什麼來參加模糊,但它是這樣的:

select i.*, 
     coalesce(mi.code, me.code) as code_1, 
     coalesce(mi.description, me.description) as description_1 
from item i left join 
    miscellaneous mi 
    on mi.code = i.key and i.code = 'misc' left join 
    medicine me 
    on me.code = i.key and i.code = 'med'; 
+0

我不認爲這是適用的,我會試一試,並回來在這裏儘快。 – Martin

+0

有條件的選擇是可行的嗎? – Martin

0

你可以嘗試LEFT JOIN,這將是實現這個最簡單的方法。 但是,如果你想同時得到表結果來下一個列名,使用UNION ALL

使用UNION ALL

SELECT * 
FROM item i 
INNER JOIN miscellaneous m on m.code=i.code 
UNION ALL 
SELECT * 
FROM item i 
INNER JOIN medicine me on me.code=i.code 

使用LEFT JOIN

SELECT * 
FROM item i 
LEFT JOIN miscellaneous m on m.code=i.code 
LEFT JOIN medicine me on me.code=i.code 
0

由於項目是你的 '基地'/主表中,可以使用LEFT JOIN匹配其他表,從而使Item表中的所有行都存在。

SELECT * 
FROM Item AS i 
LEFT JOIN Miscellaneous AS mi ON (mi.[id] = i.[key] AND i.code = 'misc') 
LEFT JOIN Medicine AS me ON (me.[id] = i.[key] AND i.code = 'med'); 

你也使用ISNULL()函數的一些先決條件

SELECT i.* 
    , ISNULL(mi.id, me.id) AS m_id 
    , ISNULL(mi.code, me.code) AS m_code 
    , ISNULL(mi.description, me.description) AS m_description 
FROM Item AS i 
LEFT JOIN Miscellaneous AS mi ON (mi.id = i.[key] AND i.code = 'misc') 
LEFT JOIN Medicine AS me ON (me.id = i.[key] AND i.code = 'med'); 

SqlFiddle Demo