簡體   English   中英

如何在 MySQL 連接中獲得等於 X 型或 Y 型的 SELECT 數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM