我试图编写一个子查询,该查询将获得与下面显示的连接查询相同的结果。
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
但是每次尝试都会产生错误。
有没有办法把它写成子查询?
答案 0 :(得分:1)
嗨,您可以使用以下查询,
SELECT DNAME FROM Department_to_major WHERE
Dcode IN (SELECT OFFERING_DEPT FROM Course
WHERE COURSE_NAME LIKE '%INTRO%')
您已使用GROUP BY子句,但查询中没有任何聚合函数。您的查询是否正常?
答案 1 :(得分:1)
这是一种使用子查询的方法:
summing: [4 5 6]
15
summing: [1 2 3]
6
我认为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
是不必要的。
答案 2 :(得分:0)
尝试以下查询。我假设你已经使用了" GROUP BY"使DNAME领域独一无二的条款。
SELECT DISTINCT(DNAME)
FROM Department_to_major
WHERE Dcode IN (SELECT OFFERING_DEPT
FROM Course
WHERE COURSE_NAME LIKE '%INTRO%');