Oracle 9i才支持 Join OnSELECT * FROM A LEFT JOIN B ON A.ID=B.A_ID 等于 SELECT * FROM A, B WHERE A.ID=B.A_ID(+)SELECT * FROM A RIGHT JOIN B ON A.ID=B.A_ID 等于 SELECT * FROM A, B WHERE A.ID(+)=B.A_ID 连接条件都是放在join on 后面. 而结果集条件是放在where后面.但A.ID(+)=B.A_ID 也算是连接条件.
那么join on是不是SQL 92标准呢?还是(+)是SQL 92标准?还是都不是标准?
我在上面的提问里写错了,应该是 SELECT * FROM A, B WHERE A.ID=B.A_ID(+)
oracle 9i支持left join, (+)的用法oracle都支持的.
不好意思,我前面没有把问题描述清楚。我遇到的问题其实是这样的:T-SQL中,用带WHERE的JOIN查询如下(1)SELECT * FROM A LEFT JOIN B ON A.ID=B.A_ID WHERE A.ID='001'这样查询出的结果是正确的,把A.ID=B.A_ID作为连接条件,而A.ID='001'则过滤了结果集用PL/SQL中,用同样的SQL语句,查询出的结果却不正确。 如果不带WHERE,那么在oracle查出的结果和在SQL Server中是一样的。但带了WHERE后,A.ID<>B.A_ID并且A.ID='001'的结果都会被取出来。用 SELECT * FROM A, B WHERE A.ID=B.A_ID(+) AND A.ID='001' 结果才和SQL Server中用(1)查询的结果一样。对于带WHERE条件的JOIN ON查询,在Oracle中该如何写呢? PS. 我用的是Oracle 9i
SELECT * FROM A LEFT OUTER JOIN B ON A.ID=B.A_ID WHERE A.ID='001'
如果关联的时候,要用到函数时JOIN。
LovenDreams(爱拼才会赢) 用OUT LEFT JOIN 和LEFT JOIN结果是一样的wupangzi(无本之木) 不太明白你的意思
如果用PL/SQL要用WHERE (+) 才正确,那么下面的T-SQL对应的PL/SQL应该如何写呢?SELECT * FROM A LEFT JOIN B ON A.ID=B.A_ID LEFT JOIN C ON A.ID=C.A_ID LEFT JOIN D ON B.ID=D.B_ID WHERE A.ID='001'
select * from a,b,c,d where a.id = b.a_id(+) and a.id = c.a_id(+) and b.id = d.b_id(+) and a.id = '001'
等于
SELECT * FROM A, B WHERE A.ID=B.A_ID(+)SELECT * FROM A RIGHT JOIN B ON A.ID=B.A_ID
等于
SELECT * FROM A, B WHERE A.ID(+)=B.A_ID
连接条件都是放在join on 后面.
而结果集条件是放在where后面.但A.ID(+)=B.A_ID
也算是连接条件.
SELECT * FROM A, B WHERE A.ID=B.A_ID(+)
WHERE A.ID='001'这样查询出的结果是正确的,把A.ID=B.A_ID作为连接条件,而A.ID='001'则过滤了结果集用PL/SQL中,用同样的SQL语句,查询出的结果却不正确。
如果不带WHERE,那么在oracle查出的结果和在SQL Server中是一样的。但带了WHERE后,A.ID<>B.A_ID并且A.ID='001'的结果都会被取出来。用
SELECT * FROM A, B WHERE A.ID=B.A_ID(+)
AND A.ID='001'
结果才和SQL Server中用(1)查询的结果一样。对于带WHERE条件的JOIN ON查询,在Oracle中该如何写呢?
PS. 我用的是Oracle 9i
用OUT LEFT JOIN 和LEFT JOIN结果是一样的wupangzi(无本之木)
不太明白你的意思
FROM
A LEFT JOIN B ON A.ID=B.A_ID
LEFT JOIN C ON A.ID=C.A_ID
LEFT JOIN D ON B.ID=D.B_ID
WHERE A.ID='001'
where a.id = b.a_id(+)
and a.id = c.a_id(+)
and b.id = d.b_id(+)
and a.id = '001'