将连接查询转换为子查询

问题描述 投票:0回答:3

我正在尝试编写一个子查询,该子查询将实现与下面所示的联接查询相同的结果。

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

然而,每次尝试都会产生错误。

有没有办法将其写为子查询?

mysql sql subquery inner-join
3个回答
1
投票

以下是使用子查询的方法:

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
是不必要的。


1
投票

您可以使用以下查询:

SELECT DNAME FROM Department_to_major WHERE
Dcode IN (SELECT OFFERING_DEPT FROM Course
WHERE COURSE_NAME LIKE '%INTRO%')

您使用了 GROUP BY 子句,但查询中没有任何聚合函数。


0
投票

尝试以下查询。我假设您已使用“GROUP BY”子句来使 DNAME 字段唯一。

SELECT DISTINCT(DNAME)
FROM Department_to_major
WHERE Dcode IN (SELECT OFFERING_DEPT
            FROM Course
            WHERE COURSE_NAME LIKE '%INTRO%');
© www.soinside.com 2019 - 2024. All rights reserved.