我尝试在一对多的关系子类中选择childs的记录为1。对于使用一条记录获取childs,我使用以下查询。
下面是一个简单的查询,如果我不使用where语句,它就能工作
select a.iid,
account_id,
count(*) as props
from accounts_prop a
group by a.account_id
having props = 1当我使用where时,我会得到完全不同的结果。在这种情况下,我得到了记录,这表明道具有一个记录,但实际上有多个记录。
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我在这个案子里错过了什么
发布于 2017-08-26 11:33:24
如果仔细检查,您的原始查询甚至不确定:
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或大多数其他数据库上运行。
相反,将您的逻辑用于查找只有一个记录的帐户到子查询中,然后加入到该子查询以获得每个匹配的完整记录:
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'发布于 2017-08-26 11:36:05
where条件过滤原始行
where a.von >= '2017-08-25'减少查询中涉及的行数
子句处理查询的结果,因此在您的筛选器中,可以使用where (或not )获得不同的结果。
在第一个查询中,您的计数是计算在第二个查询中的所有行上,您的计数只计算在一个子集上。
这可以解释为什么您从两个查询中获得不同的resul。
https://stackoverflow.com/questions/45894851
复制相似问题