如何在MySQL连接中SELECT等于类型X或类型Y的数据?

问题描述 投票:0回答:1

我试图完成一个MySQL任务,其中有以下2张表。

INSERT INTO STUDENT VALUES
(100,'Oliver','Jake','Fearon Rd','Morrisville',13408,'NY'),
(101,'Jack','Connor','Road 124','Visalia',93291,'CA'),
(102,'Harry','Callum','Worth Ave','California',20619,''),
(103,'Bella','Swan','Butler Rd','Morrisville',13408,'NY'),
(104,'Charlie','Kyle','Womack Rd','Sanford',27330,'NC'),
(105,'Jinnie','Reece','Boyer Ave','Hammonton',08037,'NJ'),
(107,'Jessica','Davies','Worth Ave','California',20619,'CA'),
(108,'Isabella','Brown','Hawkins Ave','Sanford',27330,'NC');

INSERT INTO ENROLLS VALUES
(100,'CSC11',1),
(100,'CSC11',2),
(101,'CSC11',1),
(101,'CSC12',1),
(101,'CSC13',1),
(102,'CSC12',1),
(103,'CSC12',1),
(104,'CSC13',1),
(105,'CSC12',1),
(105,'CSC13',1),
(105,'CSC14',1),
(106,'CSC14',1),
(107,'CSC14',1),
(108,'CSC14',1);

检索在 "CSC11 "或 "CSC12 "课程中注册的学生信息(SSN,名字和姓氏)("CSC11 "和 "CSC12 "是课程编号)。 注意:MySQL不支持 "INTERSECT"。

根据学生的问题,100、102、103和105应该是答案。我试过下面给出的101也包括CSC11和CSC12。

mysql> SELECT s.SSN, s.First_Name, s.Last_Name
    -> FROM STUDENT s
    -> JOIN ENROLLS e ON s.SSN= e.SSN
    -> WHERE (e.CourseNo = 'CSC11') OR (e.CourseNo = 'CSC12')
    -> GROUP BY e.SSN;

+-----+------------+-----------+
| SSN | First_Name | Last_Name |
+-----+------------+-----------+
| 100 | Oliver     | Jake      |
| 101 | Jack       | Connor    |
| 102 | Harry      | Callum    |
| 103 | Bella      | Swan      |
| 105 | Jinnie     | Reece     |
+-----+------------+-----------+

所以,请给我解释一下我在这里犯的错误和正确的查询。

mysql join group-by where-clause
1个回答
0
投票

添加一个 HAVING 子句,该子句规定课程号必须有一个,而不是两个。

SELECT s.SSN, s.First_Name, s.Last_Name
FROM STUDENT s
INNER JOIN ENROLLS e ON s.SSN = e.SSN
WHERE e.CourseNo IN ('CSC11', 'CSC12')
GROUP BY e.SSN
HAVING MIN(e.CourseNo) = MAX(e.CourseNo);

演示

注:以上假设 SSN 是学生表中的一个主键。

© www.soinside.com 2019 - 2024. All rights reserved.