mysql – 使用涉及外键的count进行查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 使用涉及外键的count进行查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1555字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 使用涉及外键的count进行查询](/upload/InfoBanner/zyjiaocheng/905/7a0468a8955b48e09d9a46f9d1a94024.jpg)
在查询中,我从三个表中获取数据:company,classes_by_company和person.我在名为company_id的所有表中都有一个外键.我使用左连接来使用匹配的company_id对表进行网格化.我试图找出每个公司和员工的课程数量.我得到的值都不正确.这是一个SQIDDLE
SELECT a.id,
a.company_id,
a.status,
COUNT(c.company_id) AS classes_per_company,
COUNT(p.employee_id) AS employees_per_company
FROM company a
LEFT JOIN classes_by_company c
ON a.company_id = c.company_id
LEFT JOIN person p
ON a.company_id = p.company_id
GROUP BY a.company_id
表结构:
CREATE TABLE company
(
id int auto_increment primary key,
company_id int,
status varchar(20)
);
CREATE TABLE classes_by_company
(
id int auto_increment primary key,
company_id int,
class_name varchar(20)
);
CREATE TABLE person
(
id int auto_increment primary key,
employee_id int,
company_id int,
person_name varchar(20)
);
解决方法:
我不得不问 – 公司为什么同时拥有company_id和id?其中一个不应该足够吗?无论如何,你的问题是由于连接的乘法性质 – 也就是说,如果一个公司有2名员工,2个班级,你最终会得到4行 – 每个组合1个(A人A级,A人) B级,B级A级,B级B级).因此,这是通常解决问题的另一种方式:
SELECT a.id, a.company_id, a.status,
c.count AS classes_per_company,
p.count AS employees_per_company
FROM company a
LEFT JOIN (SELECT company_id, COUNT(*) as count
FROM classes_by_company
GROUP BY company_id) c
ON a.company_id = c.company_id
LEFT JOIN (SELECT company_id, COUNT(*) as count
FROM person
GROUP BY company_id) p
ON a.company_id = p.company_id
(和resulting fiddle – 感谢提供一个!)
请注意,虽然两个答案都给出了正确的结果,但这个版本的性能可能更高,因为它有更高的机会使用索引.
内容总结
以上是互联网集市为您收集整理的mysql – 使用涉及外键的count进行查询全部内容,希望文章能够帮你解决mysql – 使用涉及外键的count进行查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。