我正在尝试执行此代码-
select
T.course_id
from
course_test T
where
unique(
select
R.course_id
from
section R
where
T.course_id = R.course_id and R.year=2009
);
,它在unique
中给出了缺失的表达。
所以我的问题是sql plus中允许唯一吗?
编辑-我想查找2009年最多提供一次的所有课程
课程-
course_id title dept_name
BIO-101 intro to BIO bio
部分-
course_id year
BIO-101 2009
将给出答案,答案为BIO-101 注意-我的查询是用SQL plus编写的,我只想与之相关的答案。我知道这在MySQL中有效。
答案 0 :(得分:1)
我想查找2009年最多提供一次的所有课程
您可以通过手动测试COUNT
来完成。我不熟悉Oracle和PL / SQL(“ SQL Plus”是程序,而不是语言),所以我不能说UNIQUE()
是如何工作的,但是我将这样做(使用可在所有符合SQL-92的数据库中使用的标准SQL):
SELECT
courses.*
FROM
courses
INNER JOIN
(
SELECT
course_id
FROM
section
WHERE
year = 2009
GROUP BY
course_id
HAVING
COUNT(*) = 1
) AS courses_1_in_2009 ON courses_1_in_2009.course_id = courses.course_id
这通过使用内部子查询``作为过滤器来选择仅在2009年才出现过一次的课程,如果您单独运行它,您将看到它得到的结果:
SELECT
course_id,
COUNT(*) AS count_2009
FROM
section
WHERE
year = 2009
GROUP BY
course_id
然后,我们可以添加HAVING
语句并删除不需要的count_2009
列,以获取我们感兴趣的课程中的course_id
个:
SELECT
course_id
FROM
section
WHERE
year = 2009
GROUP BY
course_id
HAVING
COUNT(*) = 1
然后用INNER JOIN
执行courses
以获取其实际名称和其他值,以获取我在顶部发布的查询。