【发布时间】:2021-09-25 00:55:33
【问题描述】:
我刚刚学习了 SQL 中的 IN 和 NOT IN 语句。我理解这样的陈述
SELECT * FROM table1 WHERE table1.attribute IN
(SELECT table2.attribute FROM table2 WHERE attribute = condition);
我的问题是我需要使用 IN (SELECT) 语句显示 3 列(来自两个不同的表),其中第三个表的条件仅来自第三个表,另一个条件来自前两个表之一。
示例: 显示名称(表 1)、班级(表 1)、课程(表 2),其中课程 LIKE “cosc%”(表 2)和成绩 = 'b'(表 3)。我需要使用 IN 语句。
我的尝试:
SELECT stud.sname, stud.class, sec.course_num FROM stud, sec
WHERE sec.course_num LIKE 'COSC%'
AND stud.stno IN
(SELECT gr.student_number FROM gr WHERE gr.grade = 'B');
Table3 与 table1 和 table2 共享一个域。此查询导致行数过多,其中一张表中只有 48 行。我知道怎么做所有的 JOIN 语句,我不需要。
【问题讨论】:
-
请显示每个表的表定义 (
CREATE TABLE ...)。包括foreign key约束以显示表是如何相关的。您在stud和sec之间缺少join标准。这就是结果中有大量行的原因。这会生成一种笛卡尔积/交叉连接。您的stud表可能引用了sec表。如果是这样,请在JOIN的ON子句中使用该引用,或者以您使用的形式在WHERE子句中使用该引用。JOIN / ON更可取,您不太可能忘记join标准。 -
每张表只包含一些样本数据,以阐明内容和关系。然后根据具体数据指出您期望的结果。