如何将此子查询条件添加到现有查询?

时间:2014-04-27 23:11:13

标签: mysql

请原谅我无法发布某些问题的完整查询,但在查询中,如果我的内容不够,请在评论中回复,我可以重构完整的查询。我的最后一部分看起来像这样:

path p1
 on as1.UpdateID = u_d1.UpdateID join
path p2 
on p2.UpdateID = u_d2.UpdateID  ;

我有另外一个像这样的查询

SELECT Count(People), UpdateID FROM path Group BY UpdateID;

我想在现有查询的最后一部分添加此查询。我试过这样的事情,但查询是永远的:

 path p1
 on p1.UpdateID = u_d1.UpdateID join
 path p2 
on as2.UpdateID = u_d2.UpdateID HAVING SUM(p2.People) = SUM(p1.People) ;

我首先尝试过“AND SUM(as2.People) = SUM(as1.People) ;”但我认为这是错误的。

有没有这样做?如果需要更多信息,请在投票前询问。

1 个答案:

答案 0 :(得分:1)

像这样,愚蠢和直截了当,用相应的查询替换“path”表

(SELECT Count(People) cnt, UpdateID FROM path Group BY UpdateID) as p1
 on as1.UpdateID = u_d1.UpdateID join
(SELECT Count(People) cnt, UpdateID FROM path Group BY UpdateID) as p2 
 on p2.UpdateID = u_d2.UpdateID and p1.cnt = p2.cnt ;

但是,如果它能够工作,那将是缓慢而低效的 - MySQL在聚合查询上的性能很差。 更好的方法是使用预先计算的总和创建“缓存”表,然后加入该表。

INSERT cache_table (UpdateId, cnt)
SELECT UpdateID, Count(People) cnt FROM path Group BY UpdateID
on duplicate key update cache_table.cnt = values(cnt)

然后

cache_table as p1
 on as1.UpdateID = u_d1.UpdateID join
cache_table as p2 
 on p2.UpdateID = u_d2.UpdateID and p1.cnt = p2.cnt ;

不要忘记定期更新cache_table。