我的数据库中有这个表
我正在使用此查询:
SELECT cl.cl_id, cl.name
FROM cl;
因为st表中的某些cl_id值没有退出,所以输出只返回到st表上的cl_id所在的位置。我需要的查询是这样的:
SELECT COUNT(*)
FROM st
WHERE st.cl_id = cl.cl_id;
但实现此
{{1}}
但如果在st表中没有来自cl_id的所有值,则该值将返回到0.
答案 0 :(得分:0)
从不在FROM
子句中使用逗号。 始终使用正确的,明确的JOIN
语法。在您的情况下,显然您需要LEFT JOIN
:
SELECT cl.cl_id, cl.name, COUNT(st.cl_id)
FROM cl LEFT JOIN
st
ON st.cl_id = cl.cl_id
GROUP BY cl.cl_id
ORDER BY cl.cl_id;
答案 1 :(得分:0)
(基于Juan的回答)
使用LEFT JOIN
和COALESCE
函数,它返回参数列表中的第一个非空值
SELECT
COALESCE(st.cl_id,0)
, COALESCE(st.name,'Name Not Found')
, COUNT(cl.cl_id)
FROM cl
LEFT JOIN st
ON st.cl_id = cl.cl_id
GROUP BY COALESCE(st.cl_id,0)
ORDER BY COALESCE(st.cl_id,0) ;