在具有可能的空结果集的多个表上设置JOINS的默认值?

时间:2010-12-02 02:17:20

标签: mysql

所以我试图在具有相同id的多个连接上进行连接,并且每个表可能有也可能没有具有该id的条目。

SELECT a.value, b.value, c.value, d.value FROM tbl_a a 
JOIN tbl_b b ON a.id=b.id 
JOIN tbl_c c ON a.id=c.id
JOIN tbl_d d on a.id=d.id
WHERE a.id=123

显然这是失败的,因为如果tbl_a没有没有条目,它返回一个空的结果集,并且连接失败。

我尝试了各种左连接,外连接,无法使其工作。我也尝试将are子句设置为:WHERE a.id=123 OR b.id=123 OR ...,但这也不起作用。

我尝试了一个丑陋的UNION但是它将输出放在一个单独的行中。

SELECT count(*), "a", IFNULL(a.value,0) FROM tbl_a a WHERE a.id=123
UNION
SELECT count(*), "b", IFNULL(b.value,0) FROM tbl_b b WHERE b.id=123
UNION
etc...

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

使用id将其他三个WHERE字段添加到OR子句,然后执行外连接。

答案 1 :(得分:0)

另一种方法是创建一个包含所需键的派生表,并将LEFT JOIN连接到所有其他表:

SELECT a.value, b.value, c.value, d.value 
FROM ( select 123 as id ) as dummy
LEFT JOIN tbl_a a ON dummy.id=a.id
LEFT JOIN tbl_b b ON dummy.id=b.id 
LEFT JOIN tbl_c c ON dummy.id=c.id
LEFT JOIN tbl_d d ON dummy.id=d.id