mysql 和条件的简写

kgsdhlau  于 2022-12-26  发布在  Mysql
关注(0)|答案(1)|浏览(126)

我正面临着一个问题与SQL查询...有一个速记与条件一样,IN=许多或条件??当没有,任何想法关于这种情况。考虑到我们有两个表的学生和主题与许多对许多关系。
问题:让所有选择题目a和b和c的学生注意:主题列表不固定。表:学生
| 学生|学生ID|
| - ------|- ------|
| w| 1个|
| x|第二章|
| Y型|三个|
| z|四个|
表:主题
| 主题|主题ID|
| - ------|- ------|
| 项目a| 1个|
| B|第二章|
| (c)秘书长的报告|三个|
| 电子|四个|
| f级|五个|
| 克|六个|
| 小时|七|
| 我|八个|
表:学生主题
| 学生ID|主题ID|
| - ------|- ------|
| 1个|1个|
| 1个|第二章|
| 1个|三个|
| 第二章|1个|
| 第二章|第二章|
| 第二章|三个|
| 三个|三个|
| 1个|六个|
这就是我所尝试的:选择****fromstudentwheretopicin(a,B,c)。结果不正确,因为知道IN是许多OR条件的简写。

2mbi3lxu

2mbi3lxu1#

在SQL中没有这种简写。
一般来说,它被称为relational-division,这是为了将它放入代数隐喻中,以形成JOIN操作的计数器,它可以类似于算术中的乘法。
因为关系除法的使用不如连接常用,所以SQL语言没有提供一个非常简单的简写。您可以得到想要的结果,但它不如使用JOIN那么快。

SELECT studentId
FROM StudentTopic
WHERE topicId IN (1,2,3)
GROUP BY studentId
HAVING COUNT(DISTINCT topicId) = 3;

还有其他方法可以获得相同的结果,例如:

SELECT s1.studentId
FROM StudentTopic AS s1
INNER JOIN StudentTopic AS s2 USING (studentId)
INNER JOIN StudentTopic AS s3 USING (studentId)
WHERE s1.topicId = 1
  AND s2.topicId = 2
  AND s3.topicId = 3;

您可以通过relational-division标签了解其他解决方案,但没有一个是非常简单的,它不是SQL中提供的特殊简写语法。

相关问题