请告诉我实际上我只想删除条目。但我没有进入此查询 我有两个表,其他表中也有相同的条目。 并且我从第一个表中删除了一些enteries,我想看到使用该查询删除的条目。但它没有给出正确的输出。
select *
from branch a, course b
where a.courseid = b.courseid(+)
and b.courseid(+) is null;
答案 0 :(得分:1)
您的查询几乎是正确的;这会奏效:
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)