所以我试图在具有相同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...
有什么想法吗?
答案 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