уникальный используемый во вложенном подзапросе SQL plus - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь выполнить этот код-

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 плюс?

изменить - я хочу найти все курсы, которые предлагались не более одного раза в 2009 году

курс-

course_id title dept_name 
BIO-101 intro to BIO bio

section-

course_id year
BIO-101 2009

даст ответ как BIO-101 в качестве ответа ПРИМЕЧАНИЕ - мои запросы написаны на SQL plus, и я хочу получить ответ, связанный только с ним. Я знаю, что это работает в MySQL.

1 Ответ

0 голосов
/ 08 сентября 2018

Я хочу найти все курсы, которые предлагались не более одного раза в 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 интересующих нас курсов:

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

Затем выполните INNER JOIN с courses, чтобы получить их действительные имена и другие значения, чтобы получить запрос, который я разместил вверху.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...