在嵌套子查询SQL plus中使用的唯一

问题描述 投票:-1回答:1

我正在尝试执行此代码 -

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中有效。

sql oracle
1个回答
1
投票

我想找到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_ids:

SELECT
    course_id
FROM
    section
WHERE
    year = 2009
GROUP BY
    course_id
HAVING
    COUNT(*) = 1

然后使用INNER JOIN执行courses以获取其实际名称和其他值以获取我在顶部发布的查询。

© www.soinside.com 2019 - 2024. All rights reserved.