Oracle左外连接查询

时间:2009-07-22 16:55:16

标签: sql oracle

select a,last_note_user,c,d,iso_src
from X,Y,Z
left outer join W
ON (W.last_note_user=Z.userid AND W.user_ten=Y.iso_src)

当我执行上述查询时,它给出了错误"Y.iso_src" is a invalid identifier。但是,Y.iso_src是一个有效的标识符,它存在于系统表中。 上面的左外连接有问题吗? 请帮帮我!!!

2 个答案:

答案 0 :(得分:10)

您不能以JOIN这种方式混合使用Oracle语法。

JOIN条件只能引用先前使用ANSI JOIN语法加入的表。

使用此:

SELECT  a, last_note_user, c, d, iso_src
FROM    X
CROSS JOIN
        Y
CROSS JOIN
        Z
LEFT OUTER JOIN
        W
ON      W.last_note_user = Z.userid
        AND W.user_ten = Y.iso_src

答案 1 :(得分:1)

如其他响应所示,不要混用ANSI和非ANSI连接语法可能是个好习惯。但是,通过将非ANSI连接隔离为子查询,技术上是可行的:

create table X as (select dummy a, dummy c, dummy d from dual);

create table Y as (select dummy iso_src from dual);

create table Z as (select dummy userid from dual);

create table W as (select dummy last_note_user, dummy user_ten from dual);

select a,last_note_user,c,d,iso_src
from (select a, c, d, iso_src, userid FROM X,Y,Z) xyz
left outer join W
ON (W.last_note_user=xyz.userid AND W.user_ten=xyz.iso_src);

A LAST_NOTE_USER C D ISO_SRC 
- -------------- - - ------- 
X X              X X X       

1 rows selected