具有多个左连接的Mysql计数
我在使用mysql查询检索带有计数的记录时遇到了很多问题。下面是一个场景。我想获取主表(标准)中包含学生人数的行,这些学生人数不在所选的学生表中具有多个左连接的Mysql计数,mysql,count,null,left-join,Mysql,Count,Null,Left Join,我在使用mysql查询检索带有计数的记录时遇到了很多问题。下面是一个场景。我想获取主表(标准)中包含学生人数的行,这些学生人数不在所选的学生表中 criteria --------- id name 1 maths 2 medicine 3 physics criteria_matches ------------------ id criteria_ref_id user_ref_id 1 1 153 2 1
criteria
---------
id name
1 maths
2 medicine
3 physics
criteria_matches
------------------
id criteria_ref_id user_ref_id
1 1 153
2 1 222
3 1 699
4 2 486
5 2 38
6 3 141
selected_students
-----------------
id user_ref_id selected_by status
1 153 15 'E'
2 500 15 'E'
3 486 15 'E'
3 141 15 'E'
expected result
----------------
criteria_id criteria_name student_count
1 maths 2
2 medicine 1
3 physics 0
我尝试使用下面的查询获取具有计数的父表行,但没有成功
SELECT t.id, t.name, COUNT(DISTINCT ss.user_ref_id) AS students_count FROM criteria t
LEFT JOIN criteria_matches cm ON cm.criteria_ref_id = t.id
LEFT JOIN selected_students ss ON ss.user_ref_id = cm.user_ref_id
WHERE dss.user_ref_id IS NULL
GROUP BY t.id ORDER BY t.name
您需要从
标准匹配项表中计算用户\u ref\u id
,而不是从所选学生中计算(由于WHERE
子句*中的过滤器,后者将始终为NULL
,因此其count()
将始终为0):
在电视上看
*注意:问题中的WHERE
子句错误地引用了未定义的表别名dss
。我假设您想引用ss
所选学生表的别名。您需要从标准匹配表中计算用户参考id
,而不是从所选学生中计算用户参考id
(由于WHERE
子句*中的过滤器,后者将始终为NULL
,因此其COUNT()
将始终为0):
在电视上看
*注意:你问题中的WHERE
子句错误地引用了未定义的表别名dss
。我想你是想引用ss
所选学生表的别名。非常感谢,你是个了不起的人哦,不,我刚刚编辑了小提琴脚本,结果没有包括所有的maste选项卡le行。@sam:您要么需要在条件
表中包含ss.user\u ref\u id为NULL的筛选条件;要么使用(效率较低,但更清晰)子查询。谢谢,我将使用外部连接非常感谢,你很了不起哦,不,我只是编辑了小提琴脚本,结果没有包括所有maste表行。@sam:你要么需要在条件
表中包含ss.user\u ref\u id为NULL的筛选条件,要么使用(效率较低,但更清晰)子查询。谢谢,我将使用外部联接
SELECT t.id, t.name, COUNT(DISTINCT cm.user_ref_id) AS students_count
FROM criteria t
LEFT JOIN criteria_matches cm ON cm.criteria_ref_id = t.id
LEFT JOIN selected_students ss ON ss.user_ref_id = cm.user_ref_id
WHERE ss.user_ref_id IS NULL
GROUP BY t.id
ORDER BY t.name