我不久前读到了@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
如果可能的话如何将过滤添加到第二个查询。