$query = "SELECT posts.*
FROM map, posts, tags
WHERE map.tag_id = tags.id
AND (tags.name IN ('mysql', 'database'))
AND map.post_id = posts.id
GROUP BY posts.id
HAVING COUNT( posts.id ) = 2";
我不明白最后一排。有人可以帮我解释一下吗?如果我没有它有什么区别?
答案 0 :(得分:5)
最后一行表示您只留下那些正好有2个帖子ID的群组。如果删除它,将选择所有组。
答案 1 :(得分:0)
“HAVING”谓词充当过滤器,它只选择具有相同post.id的两(2)个行。
看起来查询正在查找具有重复ID的行。
HAVING COUNT( posts.id ) > 1
可能会更好用于此目的。
答案 2 :(得分:0)
来自文档:
HAVING子句几乎在最后一次应用,就在项目发送到客户端之前,没有优化。 (在HAVING之后应用LIMIT。)
因此,where子句被应用,然后分组,然后具有..已经可以应用于你的分组后的caluclated值汇总所有聚合,如SUM或MAX。