嵌套子查询SQL plus

时间:2018-09-08 04:03:18

标签: sql oracle

我正在尝试执行此代码-

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

1 个答案:

答案 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以获取其实际名称和其他值,以获取我在顶部发布的查询。