我正在尝试编写查询以从3个表中选择一些行,但是我有一些特殊需要。
所以说我有table1,table2,table3作为t1,t2,t3 t1包含一个id列,它是t2和t3中的外键。
t1内容:
id
1
t2内容:
id fk val1
1 1 123
2 1 234
t3内容:
id fk val2
1 1 345
2 1 456
我要输出的结果是:
t2.id t3.id fk val1 val2
1 NULL 1 123 NULL
2 NULL 1 234 NULL
NULL 1 1 NULL 345
NULL 2 1 NULL 456
到目前为止,我转到了该查询,但是我的fk列分为两列。
SELECT * FROM t2
LEFT JOIN t3 ON (FALSE)
WHERE t2.Fk=1
UNION ALL
SELECT * FROM t2
RIGHT JOIN t3 ON (FALSE)
WHERE t3.Fk=1
任何建议如何?
答案 0 :(得分:0)
使用coalesce()
SELECT t2.id, t3.id, coalesce(t2.fk,t3,fk) as fk val1, val2 FROM t2
LEFT JOIN t3 ON (FALSE)
WHERE t2.Fk=1
UNION ALL
SELECT t2.id, t3.id, coalesce(t2.fk,t3,fk) as fk val1, val2 FROM t2
RIGHT JOIN t3 ON (FALSE)
WHERE t3.Fk=1