(My)SQL full join with three tables

前端 未结 3 1864
粉色の甜心
粉色の甜心 2020-12-19 11:01

I have tree tables

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

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

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

Can anybody p

相关标签:
3条回答
  • 2020-12-19 11:38

    As far as I know there is no full outer join in MySql. So, to do what you require you should get distinct IDs in derived table and left join original tables:

    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 讨论(0)
  • 2020-12-19 11:48
    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;
    
    0 讨论(0)
  • 2020-12-19 11:51

    Try this

      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 讨论(0)
提交回复
热议问题