условное соединение в mysql - PullRequest
17 голосов
/ 10 августа 2009

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

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

Как мне этого добиться?

Ответы [ 3 ]

18 голосов
/ 10 августа 2009

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

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'
6 голосов
/ 10 августа 2009

безобразный путь:

Типы таблиц, 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'
4 голосов
/ 09 февраля 2010

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

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

...