SQL UNION 聚合

简单的聚合函数:

表一:table1(任务表)

字段:mid,name,age,mission(任务量),cardID(身份证)

表二:table2(完成量表)

字段:cid,complete(完成量)

要求:

1、合并两张表的数据

2、任务量和完成量,没有任何关联,某人可以只有任务量,可以只有完成量,或者两者都有,这是三种情况。

困难:

如果通过cardID字段inner join 进行内连接查询,那么,只能查询到既有任务量也有完成量的数据,会丢失大部分单个数据。

解决:联合查询

1、将两张表的关联字段提取出来(可能会有重合,先不管,我们最后用distinct去重就可以了)

(select cardId from table1
union all
select cardId from table2)

2、将上sql语句结果集取别名为:users,再根据cardId在两张表中提取自己所需的数据

select users.cardId,
(select mission from table1 where cardId=users.cardId),--任务量
(select complete from table2 where cardId=users.cardId) --完成量
from users

3、在第一步时提取两表的cardId时,可能会有重复的cardId,所以去除重复数据

在users.cardId前面添加distinct即可


完整SQL语句:

select distinct users.cardId,
(select mission from table1 where cardId=users.cardId),--任务量
(select complete from table2 where cardId=users.cardId) --完成量
from 
(select cardId from table1
union all
select cardId from table2)users

补充:

如果还需要查询其他数据,(前提:该表要有cardId字段),那么在后面添加inner join ,left join表名;

在select后面用子查询提取所需数据


当然:自行添加,都需要符合SQL语句规范。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值