Условное соединение в 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