2012-07-10 10 views
5

tengo tablas de árboles(Mi) de SQL completa unirse con tres mesas

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

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

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

Puede alguien por favor, decirle cómo hacer una vista o impresiones de consulta como esta?

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

Gracias de antemano.

+1

Si desea crear un 'view' entonces hay son algunas restricciones – Lion

+0

Ok. la 'vista' no es necesaria. Una consulta instantánea también estará bien. – TaeL

Respuesta

7

Por lo que yo sé, no existe una combinación externa completa en MySql. Por lo tanto, para hacer lo que necesita usted debe obtener los identificadores distintos en la tabla derivada y dejó unir tablas originales:

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

Prueba este

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;