首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql组by与where完全返回其他结果

mysql组by与where完全返回其他结果
EN

Stack Overflow用户
提问于 2017-08-26 11:28:54
回答 2查看 31关注 0票数 0

我尝试在一对多的关系子类中选择childs的记录为1。对于使用一条记录获取childs,我使用以下查询。

下面是一个简单的查询,如果我不使用where语句,它就能工作

代码语言:javascript
复制
select a.iid, 
account_id,
count(*) as props

from  accounts_prop a
group by a.account_id
having props = 1

当我使用where时,我会得到完全不同的结果。在这种情况下,我得到了记录,这表明道具有一个记录,但实际上有多个记录。

代码语言:javascript
复制
    select a.iid, 
    account_id,
    count(*) as props

    from   accounts_prop a
    where a.von >= '2017-08-25'
    group by a.account_id

having props = 1

我在这个案子里错过了什么

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-26 11:33:24

如果仔细检查,您的原始查询甚至不确定:

代码语言:javascript
复制
SELECT
    a.iid,              -- OK, but which value of iid do we choose?
    a.account_id,
    COUNT(*) AS props
FROM accounts_prop a
GROUP BY a.account_id
HAVING props = 1

该查询没有意义,因为您选择的是iid列,而聚合是在其他列上。每个帐户应该选择哪个值的iid?这一点还不清楚,您的查询甚至不会在某些版本的MySQL或大多数其他数据库上运行。

相反,将您的逻辑用于查找只有一个记录的帐户到子查询中,然后加入到该子查询以获得每个匹配的完整记录:

代码语言:javascript
复制
SELECT a1.*
FROM accounts_prop a1
INNER JOIN
(
    SELECT account_id
    FROM accounts_prop
    GROUP BY account_id
    HAVING COUNT(*) = 1
) a2
    ON a1.account_id = a2.account_id
WHERE a1.von >= '2017-08-25'
票数 0
EN

Stack Overflow用户

发布于 2017-08-26 11:36:05

where条件过滤原始行

代码语言:javascript
复制
 where a.von >= '2017-08-25'

减少查询中涉及的行数

子句处理查询的结果,因此在您的筛选器中,可以使用where (或not )获得不同的结果。

在第一个查询中,您的计数是计算在第二个查询中的所有行上,您的计数只计算在一个子集上。

这可以解释为什么您从两个查询中获得不同的resul。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45894851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档