私はテーブルを持っていますid1
、id2
、type
。 type
は、別のテーブルの名前を含む列挙値です。 join
のテーブルの名前でtype
を実行したいと思います。例えば:
switch($type)
case 'table1':
join table1;
break;
case 'table2':
join table2;
break;
どうすればこれを達成できますか?
あなたはそのように直接それをすることはできません...あなたはこのようなことをすることができます(あまりきれいではありません...):
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'
醜い方法:
テーブルタイプ、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'
前の回答に加えて:IFステートメントを使用して2つの左結合の結果を組み合わせることができます:IF(t.type = 't2'、t2.id、t3.id)as type_id
別の mysql条件付き結合 例をmysqldiary.comで見ることができます