任何人都可以告诉我在Oracle 10G中执行哪一个

时间:2011-03-18 06:26:43

标签: oracle oracle10g

我已经给出了两个查询。第一个查询是给出正确的输出(我正在使用sqlserver)。 第二个查询我想在Oracle中执行,但它不能正常工作。请给我正确的查询,我可以在oracle中使用哪一个。

SqlServer的

select * 
from branch a left outer join course b on a.courseid=b.courseid 
where b.courseid is NULL

的Oracle

select * 
from branch a, course b 
where a.courseid= b.courseid(+) 

在oracle中,b.courseid为NULL的子句无效。

3 个答案:

答案 0 :(得分:3)

您的标记表明您使用的是Oracle 10g。 Oracle已经支持the ANSI join syntax since 9i。因此,您在SQL Server中运行的查询也应该在Oracle环境中运行。

答案 1 :(得分:0)

首先,我在Oracle中使用相同的左外连接语法,而不是旧的专有(+)语法。 Oracle在其文档中提出了相同的建议。此语法有许多限制,不适用于标准ansi语法。

如果您决定使用Oracle join运算符,我不是百分百肯定,但我认为您需要执行以下操作:

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

自从我厌倦了Oracle join运算符以来,已经有很长一段时间了。

答案 2 :(得分:0)

假设您的Oracle查询是:

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

然后我认为这应该等同于SQL Server查询。您确定两个数据库中的数据是否相同?