mysql-两个查询在同一数据库中给出不同的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-两个查询在同一数据库中给出不同的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2943字,纯文字阅读大概需要5分钟。
内容图文
![mysql-两个查询在同一数据库中给出不同的结果](/upload/InfoBanner/zyjiaocheng/880/fb686ca4e5534c169e4b9c8171f15a50.jpg)
请帮忙.我正在使用MySQL 5.1.30 Community Edition.
我有四个表:nt,运算符,国家/地区,合作类型
>表格nts具有一列(operatorId)是表operator中的列id的外键,还有一列(voice)是表合作类型中id列的外键
>表运算符具有一列(country_id),这是表国家/地区列(id)的外键
我想获取所有语音值均不等于’N / A’的操作符和国家/地区的计数,并通过以下查询按合作类型.id将它们分组:
SELECT合作类型.id AS合作类型,
COUNT(DISTINCT country_id)个AS国家,COUNT(DISTINCT operatorId)个AS运算符
FROM nts INNER JOIN操作符ON operator.id = nts.operatorId INNER JOIN国家/地区ON operator.country_id = country.id
INNER JOIN合作类型ON合作类型.id = nts.voice
WHERE合作类型.code<> “ N / A” GROUP BY合作类型.id
我得到了这个结果:
cooptype country operator 1 128 348 2 11 11 3 15 17
该查询的总和是154个国家/地区和376个操作符.
但是然后,当我想获得所有话音值不等于“ N / A”的操作符和国家/地区的所有计数时,无论使用以下查询的合作类型.id:
SELECT COUNT(DISTINCT country_id)AS国家/地区,COUNT(DISTINCT operatorID)AS操作符
FROM nts INNER JOIN操作符ON operator.id = nts.operatorId INNER JOIN国家/地区ON operator.country_id = country.id
INNER JOIN合作类型ON合作类型.id = nts.voice
WHERE合作类型.code<> ‘不适用’
我得到了这个结果:
country operator 133 372
我的问题是:
>为什么第一个查询的结果之和不等于第二个查询的结果?
>哪个是正确的结果?
数据示例:
voice country operator
1 US 1
1 US 2
1 UK 3
1 UK 4
2 US 1
2 US 2
对于第一个查询,数据应生成:
cooptype country operator
1 2 4
2 2 2
对于第二个查询,数据应生成:
country operator
2 4
解决方法:
Why is the sum of the result from the first query doesn’t equal to the result from the second query?
因为您使用COUNT(DISTINCT).
它按组统计不同的记录.
您的第一个查询对具有相同国家/地区但不同库类型的两条记录进行两次计数(因为它按库类型分组),而第二个查询对它们进行一次计数.
Which one is the right result?
两者都是对的.
对于给定的数据:
cooptype country
1 US
1 US
1 UK
1 UK
2 US
2 US
第一个查询将返回:
1 2
2 1
第二个将返回
2
,因为您有:
合作型中> 2个不同的国家= 1(美国和英国)
> 1个不同国家/地区的合作社类型= 2(美国)
总体上> 2个不同的国家(美国和英国)
您对“权利”的定义中哪个是“权利”,这完全取决于此定义.
如果只希望第二个查询与第一个查询的结果匹配,请使用
SELECT COUNT(DISTINCT cootype, country_id) AS country,
COUNT(DISTINCT cooptype, operatorId) AS operator
FROM nts
INNER JOIN
operator
ON operator.id = nts.operatorId
INNER JOIN
country
ON operator.country_id = country.id
INNER JOIN
cooperationtype
ON cooperationtype.id = nts.voice
WHERE cooperationtype.code <> 'N/A'
但是同样,这可能和您的第一个查询一样错误.
对于这些数据:
cooptype country operator
1 US 1
1 US 1
1 UK 2
1 UK 2
2 US 1
2 US 1
,什么是正确的结果集?
内容总结
以上是互联网集市为您收集整理的mysql-两个查询在同一数据库中给出不同的结果全部内容,希望文章能够帮你解决mysql-两个查询在同一数据库中给出不同的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。