0

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

这是表1的抽象结构:

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

表 2 和表 3 的所有意图和目的均相同(实际数据除外):

id 名称 data1 data2
------------------------------------------
11 轴
41 byq
55 锆石

和逻辑(抽象):

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 知识让我失望了。

提前致谢!

4

1 回答 1

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演示

于 2013-09-08T08:44:30.710 回答