查询未正确输出

时间:2011-03-18 07:43:30

标签: sql oracle10g

请告诉我实际上我只想删除条目。但我没有进入此查询 我有两个表,其他表中也有相同的条目。 并且我从第一个表中删除了一些enteries,我想看到使用该查询删除的条目。但它没有给出正确的输出。

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

1 个答案:

答案 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.courseidbranch.courseid不可归,则以下查询是等效的,甚至更容易理解:

SELECT * 
FROM branch b 
WHERE b.courseid NOT IN (SELECT c.courseid FROM course c)