我有以下查询,它应该从我的数据库(mdl_course.fullname)中提取课程列表,每个学生的名称作为列标题(mdl_user.username),以及他们完成课程的日期(mdl_feedback_value) .value的):
SELECT mdl_course.fullname,
if(mdl_user.username = "luis.arroyo", mdl_feedback_value.value, 'No')
As "Luis Arroyo "
FROM `mdl_course`
inner join mdl_feedback on mdl_feedback.course = mdl_course.id
inner join mdl_feedback_item on mdl_feedback_item.feedback = mdl_feedback.id
inner join mdl_feedback_value on mdl_feedback_value.item = mdl_feedback_item.id
inner join mdl_feedback_completed on mdl_feedback_completed.id = mdl_feedback_value.completed
inner join mdl_user on mdl_user.id = mdl_feedback_completed.userid
WHERE
(mdl_user.username = "luis.arroyo")
and mdl_feedback_value.value LIKE "%/%/%"
GROUP BY mdl_course.fullname
期望的输出:
Course name Luis Arroyo
----------- -----------
ECON 101 No
ECON 112 6/30/2017
etc. etc.
我需要做的是列出数据库中的每个课程(共187个),同时列出指定的用户和他们完成课程的日期(或显示' No&#39 ;如果他们没有。)我的WHERE和GROUP BY条款有问题。选择单个用户名仅返回部分课程列表。在上面的例子中,我只得到38个结果而不是187个(Luis完成的课程)。
从WHERE子句中删除mdl_user.username会获取所有187个课程的列表,但Luis的完成日期不会显示。一切都显示为' No。'
我不知道如何配置我的WHERE和GROUP BY子句以获得我想要的输出。
答案 0 :(得分:0)
使用LEFT JOIN
代替INNER JOIN
不需要GROUP BY
需要使用COALESCE
将NULL
转换为'NO'
答案 1 :(得分:0)
将我的IF语句更改为CASE可以获得所需的输出,同时保留GROUP BY子句。
MAX(CASE WHEN(mdl_user.username = "luis.arroyo") THEN mdl_feedback_value.value ELSE NULL END)
As "Luis Arroyo "