2010-01-05 36 views
0

我遇到了一些问题。SQL/Oracle服务器,完全外部联接和3个或更多表

我在Sql server中使用完全外连接 - 到目前为止它的工作原理是 ,但现在我添加一个表,但它不能正常工作。

这里是我的代码:

SELECT * 
FROM Table1 h , (db1..Table2 s FULL OUTER JOIN db1..Table3 k 
on k.attributT3_1 = s.attributT2_1 
    and left(k.attributT3_2,4) = year(s.attributT2_2) 
    and substring(k.attributT3_2,6,1) = s.attributT2_2 
    and (case when k.attributT3_3 = 0 and k.attributT3_4 = 11 then 10 
     when k.attributT3_3 = 0 and k.attributT3_4 = 14 then 40 
     when k.attributT3_3 = 0 and k.attributT3_4 = 16 then 60 
     when k.attributT3_3 = 0 and k.attributT3_4 = 90 then 10 
     when k.attributT3_3 = 1 and k.attributT3_4 = 11 then 11 
     when k.attributT3_3 = 2 and k.attributT3_4 = 11 then 12 
     when k.attributT3_3 = 4 and k.attributT3_4 = 11 then 14 
     when k.attributT3_3 = 7 and k.attributT3_4 = 11 then 17 
     else k.attributT3_3 end) = s.attributT2_3) 
where h.attributT1_1 = k.attributT3_1 
and s.attributT3_1 = ' 260585' 
and h.attributT1_2 = 055 

这是我的SQL,可能会有点有点混乱^^

我在这里的问题是FULL OUTER JOIN不工作,因为我加了表1,因为有是我需要的一些信息,现在FULL OUTER JOIN像LEFT OUTER JOIN一样工作。

也有可能我需要在这个FULL OUTER JOIN中添加一个或两个表。

有没有人有一个想法,我可以得到它的工作? (和是的,我知道我可以使用2左外连接和工会,并使其工作,但是这不是我想要做的)

者均基于脚本前人的精力在Oracle工作了:d

输出应是这样的: http://img402.imageshack.us/img402/4618/bildwq.jpg

列1 =表1 列2 =表2 栏3 =表3

空值不放在桌子上存在

我的脚本不相同,除了ü不能看到列2行与空

+0

我发现你的问题解释混乱。你能证明你想要的输出与你所得到的结果吗? – RedFilter 2010-01-05 12:54:40

回答

1

WHERE子句限制,可以返回的结果:

where h.attributT1_1 = k.attributT3_1 
and s.attributT3_1 = ' 260585' 
and h.attributT1_2 = 055 

这意味着,只有结果,其中表H, K和S贡献了一排(不为空)将会显示。实际上,您已经从联接中删除了OUTER。尝试将这些条件移入连接定义。

一个例子来说明我的意思:

SQL> create table t1 (id integer, text varchar2(10)); 
SQL> create table t2 (id integer, text varchar2(10)); 
SQL> insert into t1 values (1, 'text'); 
SQL> insert into t1 values (2, 'text'); 
SQL> insert into t2 values (2, 'text'); 
SQL> insert into t2 values (3, 'text'); 
SQL> commit; 

完全外部联接:

SQL> select * from t1 full outer join t2 on t1.id = t2.id; 

     ID TEXT    ID TEXT 
---------- ---------- ---------- ---------- 
     2 text    2 text 
           3 text 
     1 text 

现在,随着过滤器的WHERE子句(注意,2条消失,就好像“全外”是不存在):

1* select * from t1 full outer join t2 on t1.id = t2.id 
    2* where t1.text='text' 
    3 and t2.text='text'; 

     ID TEXT    ID TEXT 
---------- ---------- ---------- ---------- 
     2 text    2 text 
与过滤器

现在搬进加入:

SQL> select * from t1 full outer join t2 on t1.id = t2.id 
    2          and t1.text='text' 
    3          and t2.text='text'; 

     ID TEXT    ID TEXT 
---------- ---------- ---------- ---------- 
     2 text    2 text 
           3 text 
     1 text