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

我试图完成一个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     |
+-----+------------+-----------+

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

解决方案:

添加一个 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 是学生表中的一个主键。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

当运行.configure安装Kerberos v5时出现错误。

2022-5-11 17:00:18

解决方案

如何从python数据框中提取1小时的数据?

2022-5-11 18:00:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索