MySQL:基于if / case语句加入不同的表

时间:2013-09-08 08:15:21

标签: mysql sql left-join case

我有一个包含两组ID的表(dec_id和rec_id)。如果在Table1中找到dec_id,我需要保持连接该表。如果不是 - 左连接table2。第二列也是如此。我还需要知道在哪个表中找到了哪个ID。

这是表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知识让我失望。

提前致谢!

1 个答案:

答案 0 :(得分: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 演示