我有2个桌子有趣(主)和blk(奴隶)。
sqlite> select * from fun;
id mod_id name freq
---------- ---------- ----------- ----------
1 1 adpcm_coder 99108
2 1 adpcm_decod 0
我想知道有多少blk是有趣的,所以我使用“group by”:
sqlite> SELECT fun.*, count(blk.id) as no_blk FROM fun, blk WHERE fun.id=blk.fun_id GROUP BY (blk.fun_id);
id mod_id name freq no_blk
---------- ---------- ----------- ---------- ----------
1 1 adpcm_coder 99108 12
第二行被拒绝,因为它的blks不存在。 如何得到这样的结果?
id mod_id name freq no_blk
---------- ---------- ----------- ---------- ----------
1 1 adpcm_coder 99108 12
2 1 adpcm_decod 0 0
答案 0 :(得分:3)
你想要一个OUTER JOIN
此外,您应该GROUP BY
SELECT
子句中的所有非汇总列。{/ p>
尝试这样的事情:
SELECT fun.id, fun.mod_id, fun.name, fun.freq, count(blk.id) as no_blk
FROM fun
LEFT OUTER JOIN blk
ON blk.fun_id = fun.id
GROUP BY fun.id, fun.mod_id, fun.name, fun.freq;
答案 1 :(得分:1)
亚当是正确的;另一种方法:
SELECT fun.*, count(blk.id) as no_blk FROM fun, blk
WHERE fun.id=blk.fun_id GROUP BY (blk.fun_id)
UNION
SELECT fun.*, 0 as no_blk FROM fun, blk
WHERE fun.id not in (SELECT fun.id from fun, blk WHERE fun.id=blk.fun_id);