MySQL中“full outer join“的实现

一: 先创建两个表

二: 使用【left join】 union 【right join】

select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 left join tb t2 on t1.dim_a=t2.dim_a
union
select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b  from ta t1 right join tb t2 on t1.dim_a=t2.dim_a

 

三: 合并最终的结果

select if(t3.dim_a is null, t3.dim_b, t3.dim_a) dim_a, t3.qty_a, t3.qty_b
from (
    select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 left join tb t2 on t1.dim_a=t2.dim_a
    union
    select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b  from ta t1 right join tb t2 on t1.dim_a=t2.dim_a
      ) t3;

四: 源代码

drop table if exists ta;
create table if not EXISTS ta(  `dim_a` varchar(255),   `qty` int);
create table if not EXISTS tb(  `dim_a` varchar(255),   `qty` int);
 
insert into ta(dim_a,qty) values('a',343); -- 可以省略字段,初始值的时候,注意字段的顺序和类型
insert into ta values('b',324);
insert into ta values('c',563);
insert into ta values('d',7464);
 
insert into tb values('a',343);
insert into tb values('c',57);
insert into tb values('e',5353);
insert into tb values('f',242);
 
select if(t3.dim_a is null, t3.dim_b, t3.dim_a) dim_a, t3.qty_a, t3.qty_b
from (
        select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 left join tb t2 on t1.dim_a=t2.dim_a
        union
        select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b  from ta t1 right join tb t2 on t1.dim_a=t2.dim_a
        ) t3;
-- mysql中没有full join 可以使用 select if(表1.主键 is null, 表2主键, 表1主键) 主键字段 from 表 【left join】 union 【right join】 <br>-- Oracle中有full join

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值