我正在尝试执行此代码 -
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中有效。
我想找到2009年最多提供一次的所有课程
你可以通过手动测试COUNT
来做到这一点。我不熟悉Oracle和PL / SQL(“SQL Plus”是一个程序,而不是一种语言),所以我不能说UNIQUE()
是如何工作的,但这就是我如何做到的(使用标准的SQL适用于所有符合SQL-92的数据库):
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
s:
SELECT
course_id
FROM
section
WHERE
year = 2009
GROUP BY
course_id
HAVING
COUNT(*) = 1
然后使用INNER JOIN
执行courses
以获取其实际名称和其他值以获取我在顶部发布的查询。