2010-12-02 99 views
0

所以我试图用相同的ID做多个连接,每个表可能有也可能没有这个ID的条目。为可能为空的结果集的多个表设置JOINS的默认值?

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没有没有一个条目,就返回一个空结果和连接失败。

我试过各种各样的左连接,外连接,并不能得到它的工作。我也尝试设置的子句是这样的:WHERE a.id=123 OR b.id=123 OR ...但也没有工作。

我试过一个丑陋的联盟,但它给出了一个单独的行输出。

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... 

任何想法?

回答

0

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

+0

我明白了,我是做了左外连接,我应该做的权利外连接,它似乎工作。 – kenhcwoo 2010-12-02 02:35:51

0

另一种方法是创建一个包含派生表所需键和LEFT JOIN-ING所有其他表:

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 
相关问题