2013-09-08 4 views
0

У меня есть таблица с двумя наборами идентификаторов (dec_id и rec_id). Если dec_id находится в таблице 1, мне нужно перейти в эту таблицу. Если нет - левая таблица join2. То же самое касается второго столбца. Мне также нужно знать, какой идентификатор был найден в таблице.MySQL: объединение разных таблиц на основе оператора if/case

Вот абстрактная структура таблицы 1:

 
dec_id  rec_id  
----------------- 
11   16 
23   24 
15   31 

Таблицы 2 и 3 для всех намерена и цели идентичны (кроме фактических данных):

 
id  name   data1   data2 
------------------------------------------ 
11  a   x    p 
41  b   y    q 
55  c   z    r 

И логика (аннотация):

IF (dec_id IS IN Table1) { 
    LEFT JOIN Table1 on (dec_id = table1.id); 
    LEFT JOIN Table2 on (rec_id = table2.id); 
    FLAG = 1; 
} ELSE { 
    LEFT JOIN Table1 on (rec_id = table1.id); 
    LEFT JOIN Table2 on (dec_id = table2.id); 
    FLAG = 0; 
} 
LEFT JOIN Table3, Table4, ... 

Я знаю, что результат может быть достигнут на PHP с несколькими запросами, но я бы хотел избегать его, если это возможно, ради эффективности; к сожалению, мои знания SQL не позволяют мне.

Заранее благодарен!

ответ

0

Вы ищете что-то вроде этого?

SELECT COALESCE(t2.id, t3.id) id, 
     (t2.id IS NOT NULL) flag, 
     COALESCE(t2.name, t3.name) name, 
     COALESCE(t2.data1, t3.data1) data1 
    FROM table1 t1 LEFT JOIN table2 t2 
    ON t1.dec_id = t2.id LEFT JOIN table3 t3 
    ON t1.rec_id = t3.id 

Вот SQLFiddle демо

+0

Это именно то, что я искал, спасибо большое! – user2758437

+0

@ user2758437 Вы очень желанны. Я рад, что смог помочь :) – peterm

Смежные вопросы