Условное соединение в mysql

У меня есть таблица id1, id2, type. type - это перечислимое значение, содержащее имя другой таблицы. Я хотел бы создать a join с именем таблицы type. Например:

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

Как я могу это достичь?

Ответы

Ответ 1

Вы не можете сделать это прямо так... вы можете сделать что-то вроде этого (не очень красивое...):

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'

Ответ 2

Уродливый способ:

Типы таблиц, 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'

Ответ 3

В дополнение к предыдущему ответу: Вы можете комбинировать результаты двух левых объединений с помощью оператора IF: IF (t.type = 't2', t2.id, t3.id) как type_id

Вы можете увидеть еще один mysql условные соединения на mysqldiary.com