首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从具有多个约束的内部联接表中进行选择?

如何从具有多个约束的内部联接表中进行选择?
EN

Stack Overflow用户
提问于 2017-10-06 01:35:19
回答 3查看 471关注 0票数 1

找到本科和研究生水平的讲师的名字。

代码语言:javascript
复制
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是研究生。

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2017-10-06 01:38:10

在一个SQL查询中不能有多个WHERE语句。你需要移除第二个。DISTINCT不是一个函数;您需要一个空格而不是括号来使用它。

另外,请注意,9不在1, 2, 3中,因此拥有WHERE yearlevel IN(1, 2, 3) AND yearlevel = 9不会产生任何结果。另外,您还希望使用OR语句。或者更好的是,只需将其包含在IN中即可。

代码语言:javascript
复制
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

希望这会有帮助!)

票数 0
EN

Stack Overflow用户

发布于 2017-10-06 01:41:41

有一件事要注意的是,你不需要在那里之后的和。除此之外,你的情况似乎不正确:

代码语言:javascript
复制
yearlevel IN (1, 2, 3) AND yearlevel = 9  

如果年份必须为1、2或3 (根据第一个条件),则不为9;如果年份必须为9(按照第二个条件),则不为1、2或3。因此,您永远无法同时满足这两个条件,因此永远无法满足。解决这一问题的一种方法是将所有内容都包含在第一个条件中,然后删除第二个条件:

代码语言:javascript
复制
yearlevel IN (1, 2, 3, 9)
票数 0
EN

Stack Overflow用户

发布于 2017-10-06 01:42:21

DISTINCT不是一个函数。而且,您几乎不需要SELECT DISTINCTGROUP BY

我建议:

代码语言:javascript
复制
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  ;

注意,我还添加了表别名。

编辑:

事实上,当我读到这个问题时,我认为你打算:

代码语言:javascript
复制
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  ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46597046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档