Проблемы оператора SQL (не IN) - PullRequest
0 голосов
/ 06 ноября 2018

Работая через уникальное задание (до крайнего срока), не могу понять, как / почему я неправильно использую функцию NOT IN.

SELECT DISTINCT P1.TITLE, P1.PANUM, D1.POSTCODE
FROM PAPER P1
INNER JOIN AUTHOR A1 ON A1.PANUM = P1.PANUM
INNER JOIN ACADEMIC A2 ON A2.ACNUM = A1.ACNUM
INNER JOIN DEPARTMENT D1 ON D1.DEPTNUM = A2.DEPTNUM
WHERE P1.PANUM NOT IN(
    SELECT DISTINCT P1.TITLE, P1.PANUM, D1.POSTCODE
    FROM PAPER P1
    INNER JOIN AUTHOR A1 ON A1.PANUM = P1.PANUM
    INNER JOIN ACADEMIC A2 ON A2.ACNUM = A1.ACNUM
    INNER JOIN DEPARTMENT D1 ON D1.DEPTNUM = A2.DEPTNUM
    WHERE D1.POSTCODE LIKE '4%'
)
ORDER BY P1.PANUM;

Цель состоит в том, чтобы создать список P1.TITLE, у которого нет авторов, из почтового индекса, начинающегося с 4.

Я получаю ошибку ORA-00913: Too Many Values, и не могу понять, почему.

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Когда вы используете ключевое слово IN и NOT IN, это означает, что внутри него должен быть только один параметр (или столбец).

0 голосов
/ 06 ноября 2018

Просто сфокусируясь на вашей проблеме:

Цель состоит в том, чтобы создать список P1.TITLE, у которого нет авторов почтовый индекс, начинающийся с 4.

Вы можете просто сделать это:

SELECT TITLE, PANUM
FROM PAPER
WHERE NOT EXISTS (
    SELECT 1
    FROM AUTHOR
    INNER JOIN ACADEMIC ON AUTHOR.ACNUM = ACADEMIC.ACNUM
    INNER JOIN DEPARTMENT ON ACADEMIC.DEPTNUM = DEPARTMENT.DEPTNUM
    WHERE AUTHOR.PANUM = PAPER.PANUM
    AND DEPARTMENT.POSTCODE LIKE '4%'
)
ORDER BY PANUM
0 голосов
/ 06 ноября 2018

Вы должны выбрать один столбец во внутреннем подзапросе

SELECT DISTINCT P1.TITLE, P1.PANUM, D1.POSTCODE
FROM PAPER P1
INNER JOIN AUTHOR A1 ON A1.PANUM = P1.PANUM
INNER JOIN ACADEMIC A2 ON A2.ACNUM = A1.ACNUM
INNER JOIN DEPARTMENT D1 ON D1.DEPTNUM = A2.DEPTNUM
WHERE P1.PANUM NOT IN(
    SELECT  P1.PANUM
    FROM PAPER P1
    INNER JOIN AUTHOR A1 ON A1.PANUM = P1.PANUM
    INNER JOIN ACADEMIC A2 ON A2.ACNUM = A1.ACNUM
    INNER JOIN DEPARTMENT D1 ON D1.DEPTNUM = A2.DEPTNUM
    WHERE D1.POSTCODE LIKE '4%'
)
ORDER BY P1.PANUM;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...