MySQL:查询中的IF条件需要以表格格式显示输出

时间:2017-03-15 17:48:30

标签: mysql

我有以下查询,它应该从我的数据库(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子句以获得我想要的输出。

2 个答案:

答案 0 :(得分:0)

使用LEFT JOIN代替INNER JOIN

不需要GROUP BY

需要使用COALESCENULL转换为'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 "