mysql多表关联count查询样例

建表:

注意:这些建表语句,是先删除表,再创建的,如果有表,删除drop语句。

DROP TABLE IF EXISTS `lyb_activity`;
CREATE TABLE `lyb_activity` (
  `id` varchar(32) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  `status` int(11) NOT NULL,
  `title` varchar(100) DEFAULT NULL,
  `user_id` varchar(32) DEFAULT NULL,
  `vote_status` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `lyb_activity_judge`;
CREATE TABLE `lyb_activity_judge` (
  `id` varchar(32) NOT NULL,
  `activity_id` varchar(32) DEFAULT NULL,
  `user_id` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `lyb_activity_work`;
CREATE TABLE `lyb_activity_work` (
  `id` varchar(32) NOT NULL,
  `activity_id` varchar(32) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `doc_file_id` varchar(32) DEFAULT NULL,
  `title` varchar(100) DEFAULT NULL,
  `vote_num` int(11) NOT NULL,
  `score` double NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表名1:lyb_activity

表名2:lyb_activity_judge

表名3:lyb_activity_work

查询:查询表1的所有属性,以及表2关联表1的数量,以及表3关联表1的数量。

语句如下:

select a.*,count(distinct j.id) as '表2关联数量',count(distinct w.id) as '表3关联数量'

from lyb_activity a 

left join lyb_activity_judge j on a.id = j.activity_id 

left join lyb_activity_work w on a.id = w.activity_id 

group by a.id order by a.create_time asc;

查询结果:

如果不加distinct,那么查询出来的统计的数量不正确,count的数量是两个count的正确值的乘积。

因为left join 表时,以 lyb_activity 为基础,lyb_activity_judge 如果有3条记录,lyb_activity_work 有2条记录,那么查询出来的数据条数,是 关联的两个表的数据条数的乘积,即查询出6条数据,然后再count时,两个count的值就都是6了,而不是一个3,一个2。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值