web-dev-qa-db-ja.com

mysqlの条件付き結合

私はテーブルを持っていますid1id2typetypeは、別のテーブルの名前を含む列挙値です。 joinのテーブルの名前でtypeを実行したいと思います。例えば:

switch($type)
case 'table1':
   join table1;
   break;
case 'table2':
   join table2;
   break;

どうすればこれを達成できますか?

17
rashcroft

あなたはそのように直接それをすることはできません...あなたはこのようなことをすることができます(あまりきれいではありません...):

SELECT
t.id,
t.type,
t2.id AS id2,
t3.id AS id3

FROM t
LEFT JOIN t2 ON t2.id = t.id AND t.type = 't2'
LEFT JOIN t3 ON t3.id = t.id AND t.type = 't3'
19
Greg

醜い方法:

テーブルタイプ、T1、T2:

SELECT ... FROM Types, T1 , where Types.ID=T1.Types_ID AND Types.TYPE='TABLE1'
UNION
SELECT ... FROM Types, T2 , where Types.ID=T2.Types_ID AND Types.TYPE='TABLE2'
6
Steve B.

前の回答に加えて:IFステートメントを使用して2つの左結合の結果を組み合わせることができます:IF(t.type = 't2'、t2.id、t3.id)as type_id

別の mysql条件付き結合 例をmysqldiary.comで見ることができます

5
Ilan