找到本科和研究生水平的讲师的名字。
SELECT DISTINCT(CONCAT(firstname, ' ', lastname)) as Lecturer_Name
FROM Lecturer INNER JOIN Subject on Lecturer.id = Subject.lecturer
WHERE yearlevel IN(1, 2, 3) and WHERE yearlevel = 9
GROUP BY Lecturer.id这将不返回从2表讲师和主题,其中学年= (1,2,3)在大学和年级=9是研究生。
任何帮助都将不胜感激。
发布于 2017-10-06 01:38:10
在一个SQL查询中不能有多个WHERE语句。你需要移除第二个。DISTINCT不是一个函数;您需要一个空格而不是括号来使用它。
另外,请注意,9不在1, 2, 3中,因此拥有WHERE yearlevel IN(1, 2, 3) AND yearlevel = 9不会产生任何结果。另外,您还希望使用OR语句。或者更好的是,只需将其包含在IN中即可。
SELECT DISTINCT CONCAT(firstname, ' ', lastname) as Lecturer_Name
FROM Lecturer INNER JOIN Subject on Lecturer.id = Subject.lecturer
WHERE yearlevel IN(1, 2, 3, 9)
GROUP BY Lecturer.id希望这会有帮助!)
发布于 2017-10-06 01:41:41
有一件事要注意的是,你不需要在那里之后的和。除此之外,你的情况似乎不正确:
yearlevel IN (1, 2, 3) AND yearlevel = 9 如果年份必须为1、2或3 (根据第一个条件),则不为9;如果年份必须为9(按照第二个条件),则不为1、2或3。因此,您永远无法同时满足这两个条件,因此永远无法满足。解决这一问题的一种方法是将所有内容都包含在第一个条件中,然后删除第二个条件:
yearlevel IN (1, 2, 3, 9)发布于 2017-10-06 01:42:21
DISTINCT不是一个函数。而且,您几乎不需要SELECT DISTINCT和GROUP BY。
我建议:
SELECT DISTINCT CONCAT_WS(' ', l.firstname, l.lastname) as Lecturer_Name
FROM Lecturer l INNER JOIN
Subject s
ON l.id = s.lecturer
WHERE yearlevel IN (1, 2, 3) AND yearlevel = 9 ;注意,我还添加了表别名。
编辑:
事实上,当我读到这个问题时,我认为你打算:
SELECT DISTINCT CONCAT_WS(' ', l.firstname, l.lastname) as Lecturer_Name
FROM Lecturer l INNER JOIN
Subject s
ON l.id = s.lecturer
GROUP BY CONCAT_WS(' ', l.firstname, l.lastname)
HAVING SUM(yearlevel IN (1, 2, 3)) > 0 AND
SUM(yearlevel = 9) > 0 ;https://stackoverflow.com/questions/46597046
复制相似问题