我正在尝试编写一个子查询,该子查询将实现与下面所示的联接查询相同的结果。
SELECT Department_to_major.DNAME
FROM Department_to_major
INNER JOIN Course
ON Department_to_major.Dcode = Course.OFFERING_DEPT
WHERE Course.COURSE_NAME LIKE '%INTRO%'
GROUP BY Department_to_major.DNAME
然而,每次尝试都会产生错误。
有没有办法将其写为子查询?
以下是使用子查询的方法:
SELECT DISTINCT dm.DNAME
FROM Department_to_major dm
WHERE EXISTS (SELECT 1
FROM Course c
WHERE dm.Dcode = c.OFFERING_DEPT AND
c.COURSE_NAME LIKE '%INTRO%'
);
我假设
GROUP BY
是为了防止输出重复; SELECT DISTINCT
做同样的事情。
也就是说,将部门代码 和 名称存储在
Department_to_major
中并不是一个好的数据结构,因为部门名称(大概)重复了多次。我希望您只有一张Departments
表,每个部门一行。
那么查询将如下所示:
SELECT d.DNAME
FROM Departments d
WHERE EXISTS (SELECT 1
FROM Course c
WHERE d.Dcode = c.OFFERING_DEPT AND
c.COURSE_NAME LIKE '%INTRO%'
);
并且
SELECT DISTINCT
/GROUP BY
是不必要的。
您可以使用以下查询:
SELECT DNAME FROM Department_to_major WHERE
Dcode IN (SELECT OFFERING_DEPT FROM Course
WHERE COURSE_NAME LIKE '%INTRO%')
您使用了 GROUP BY 子句,但查询中没有任何聚合函数。
尝试以下查询。我假设您已使用“GROUP BY”子句来使 DNAME 字段唯一。
SELECT DISTINCT(DNAME)
FROM Department_to_major
WHERE Dcode IN (SELECT OFFERING_DEPT
FROM Course
WHERE COURSE_NAME LIKE '%INTRO%');