Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个左连接的Mysql计数_Mysql_Count_Null_Left Join - Fatal编程技术网

具有多个左连接的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

我在使用mysql查询检索带有计数的记录时遇到了很多问题。下面是一个场景。我想获取主表(标准)中包含学生人数的行,这些学生人数不在所选的学生表中

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