不支持join on的语法字段1=字段2(+)(左连接)
字段1(+)=字段2(右连接)

解决方案 »

  1.   

    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
    也算是连接条件.
      

  2.   

    那么join on是不是SQL 92标准呢?还是(+)是SQL 92标准?还是都不是标准?
      

  3.   

    我在上面的提问里写错了,应该是
    SELECT * FROM A, B WHERE A.ID=B.A_ID(+)
      

  4.   

    oracle 9i支持left join,   (+)的用法oracle都支持的.
      

  5.   

    不好意思,我前面没有把问题描述清楚。我遇到的问题其实是这样的: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
      

  6.   

    SELECT * FROM A LEFT OUTER JOIN B ON A.ID=B.A_ID WHERE A.ID='001'
      

  7.   

    如果关联的时候,要用到函数时JOIN。
      

  8.   

    LovenDreams(爱拼才会赢)
    用OUT LEFT JOIN 和LEFT JOIN结果是一样的wupangzi(无本之木) 
    不太明白你的意思
      

  9.   

    如果用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'
      

  10.   

    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'