MySQL Query - 从其他表中选择行计数

时间:2017-11-08 15:21:43

标签: mysql sql count

我的数据库中有这个表

enter image description here

我正在使用此查询:

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.

2 个答案:

答案 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 JOINCOALESCE函数,它返回参数列表中的第一个非空值

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) ;