Запрос не дает вывод правильно - PullRequest
0 голосов
/ 18 марта 2011

пожалуйста, скажите мне, на самом деле я хочу только удалить записи. Но я не получил в этом запросе У меня есть две таблицы, эта же запись присутствует в другой таблице также. и я удалил несколько записей из первой таблицы, и я хочу видеть эту удаленную запись, использующую этот запрос. Но она не выдает правильный вывод.

select *
from branch a, course b
where a.courseid = b.courseid(+)
and b.courseid(+) is null;

1 Ответ

1 голос
/ 18 марта 2011

Ваш запрос почти верен;это будет работать:

SELECT *
FROM branch a, course b
WHERE a.courseid = b.courseid(+)
  AND b.courseid IS NULL;

Этот запрос эквивалентен следующему запросу с синтаксисом соединения ANSI:

SELECT *
FROM branch a
LEFT JOIN course b ON a.courseid = b.courseid
WHERE b.courseid IS NULL;

Однако это сложный способ получить строки из branch, которыене в course (против присоединения).Следующий запрос должен генерировать тот же план и его легче читать:

SELECT * 
FROM branch b 
WHERE NOT EXISTS (SELECT NULL 
                  FROM course c 
                  WHERE c.courseid = b.courseid)

Если course.courseid и branch.courseid НЕ ОБНАРУЖЕНЫ, следующий запрос эквивалентен и даже проще для понимания:

SELECT * 
FROM branch b 
WHERE b.courseid NOT IN (SELECT c.courseid FROM course c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...