[英]Query latest insert data of X type before latest insert data of Y type MySQL
[英]How to SELECT data which equals either Type X or Type Y in a MySQL join?
我正在嘗試完成具有以下 2 個表的 MySQL 任務。
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
是學生表中的主鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.