2012-07-10 40 views
5

加入我的树表(我的)SQL满三个用表

ID A 
----------- 
1  10 

ID B 
----------- 
1  20 
2  30 

ID C 
----------- 
2  40 
3  50 

任何人可以告诉如何做一个视图或查询打印这样吗?

ID  A  B  C  R (A + B - C) 
----------------------------------- 
1  10  20  0  30 
2  0  30  40 -10 
3  0  0  50 -50 

在此先感谢。

+1

如果你想创建一个'view'则有有一些限制。 – Lion 2012-07-10 09:28:58

+0

好的。 'view'不是必需的。即时查询也可以。 – TaeL 2012-07-10 09:34:56

回答

7

据我所知在MySql中没有完整的外连接。所以,做你需要,你应该得到的派生表不同的ID和留下加入原始表:

select ids.id, 
     ifnull(table1.A, 0) A, 
     ifnull(table2.B, 0) B, 
     ifnull(table3.C, 0) C, 
     ifnull(table1.A, 0) + ifnull(table2.B, 0) - ifnull(table3.C, 0) R 
    from 
    (
    select id 
     from table1 
    union 
    select id 
     from table2 
    union 
    select id 
     from table3 
) ids 
    left join table1 
    on ids.id = table1.id 
    left join table2 
    on ids.id = table2.id 
    left join table3 
    on ids.id = table3.id 
0

试试这个

select t1.ID, t1.A,t2.B,t3.C,t1.A+t2.B-t3.C as R 
    from tableA t1 
    full outer join tableB t2 on t1.id =t2.id 
    full outer join tableC t3 on t1.id =t3.id 
0
select coalesce(a.Id, b.Id, c.Id) ID, 
     case when a.A > 0 then a.A else 0 end, 
     case when b.B > 0 then b.B else 0 end, 
     case when c.C > 0 then c.C else 0 end, 
     ifnull(a.A, 0) + ifnull(b2.B, 0) - ifnull(c.C, 0) R 
from tableA a 
right outer join tableB b on a.id = b.id 
right outer join tableC c on b.id = c.id;