我有一个包含两组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知识让我失望。
提前致谢!
答案 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 演示