【发布时间】:2012-08-23 13:44:39
【问题描述】:
不久前我读到了@Bill Karwin 的出色回答:
https://stackoverflow.com/a/1313293/317889
这几乎回答了这个问题,但是我最近不得不更新我的查询以过滤连接表的状态。
我在下面写了两个查询,类似于上面帖子中的查询。第一个较慢的查询与联接表状态过滤一起使用:
SELECT m.*, t1.* FROM mood m
LEFT JOIN temper t ON ( m._id = t.mood_id )
WHERE grantee_username = "username"
AND m.status_id != 1 // NOT INTERESTED IN THIS FILTER
AND t.status_id != 1 // FILTERING
GROUP BY m._id;
对于第二个查询,我不知道如何添加过滤以使其按上述方式工作:
SELECT m.*, t1.* FROM mood m
LEFT JOIN temper t1 ON ( m._id = t1.mood_id )
LEFT JOIN temper t2 ON ( t1.mood_id = t2.mood_id AND t1._id < t2._id )
WHERE t2._id IS NULL
AND m.grantee_username = "username"
AND m.status_id != 1; // NOT INTERESTED IN THIS FILTER
第一个查询完美运行,但被认为比第二个查询慢。
第二个查询用于将所有情绪记录及其相关的上次脾气记录带回,但是上次脾气记录可能具有我不想要的状态 1。
任何见解都会很有趣。我总是可以只使用第一个查询,但为了性能起见,我想弄清楚如何在可能的情况下将t.status_id 过滤添加到第二个查询中。
【问题讨论】:
标签: mysql sql group-by greatest-n-per-group