2017-07-31 7 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の場合は、medmedicine tableと結合する場合、misc tableと結合します。

私は

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

のようなテーブルの基本的なJOINを知っているしかし、私はJOIN

+0

でISNULL()関数を使用して、その他&医学のテーブルの列を組み合わせることができ!!!あなたが実際に達成しようとしていることは何ですか? – Rahul

+0

メインテーブルの1つのカラムの値に基づいてJOINテーブルを作成することができます。私は、コードが雑であれば私の例のようなどのテーブルにジョインするかを教えるコード列を持っています。その他のテーブルと一緒にジョインしてください。メディカルテーブル@ラフル – Martin

+0

条件付きジョインのいくつかのオプション[条件付きジョイン](https ://stackoverflow.com/questions/26518526/conditional-join-statement-sql-server) – SQLAndOtherStuffGuy

答えて

2

にどのテーブルあなたはleft joinを使用することができますを指すようになります条件がある場合に参加する方法がわかりません。あなたの質問は何と結合されなければならないものに漠然としているが、それはこのようなものです:あなたはこれを実装する最も簡単な方法となります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

私はこれを実行できないと思っていませんでした。ここでASAP。 – Martin

+0

条件付き選択はこの実行可能ですか? – Martin

0

。 しかし、あなたがテーブルの結果の両方が項目は、あなたの 'ベース' であるので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

を使用して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 

を使用してUNION ALL

を使用し、1つの列名の下に来てほしい場合は/ 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'); 

また、実際の有線だいくつかの前提条件

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

関連する問題