澄清SQL中的连接以及可以引用别名的位置

时间:2013-11-21 20:45:18

标签: sql oracle oracle-sqldeveloper

这是我的查询的一部分:

LEFT OUTER JOIN hz_cust_acct_sites_all acct ON acct.party_site_id = hzps.party_site_id 

LEFT OUTER JOIN hz_cust_site_uses_all site ON site.cust_acct_site_id = acct.cust_acct_site_id
                                          AND site.site_use_code = 'BILL_TO'

在第二个LEFT OUTER JOIN语句中引用acct是否可以?范围如何适用于SQL。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,技术上允许使用可选部分的可选部分

编辑: 我仍然怀疑我是否正确理解了问题。 我猜这是关于OUTER JOIN链接的。

考虑这个例子:

create table t1 ( a int, b int ); 
create table t2 ( a int, b int ); 
create table t3 ( a int, b int ); 

insert into t1 values ( 1, 10 ); 
insert into t1 values ( 2, 20 ); 
insert into t1 values ( 3, 30 ); 

insert into t2 values ( 10, 100 ); 
insert into t2 values ( 20, 200 ); 

insert into t3 values ( 100, 1000 ); 
insert into t3 values ( 300, 3000 ); 

查询

select t1.a, t2.b t2_b, t3.b t3_b
from 
  T1 
    left join t2 on ( t1.b = t2.a ) 
    left join t3 on ( t2.b = t3.a ) 
order by 1, 2, 3

会得到:

A   T2_B    T3_B
1   100 1000    ==> here all linked.OK
2   200 (null)  ==> here just T2_B got, but no link to T3. 
3   (null)  (null)  ==> no elements to bring from T2, T3

同样如此 http://sqlfiddle.com/#!4/f61f6/5