帮助我理解这个MySQL代码

时间:2009-11-14 00:51:15

标签: mysql sql

$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";

我不明白最后一排。有人可以帮我解释一下吗?如果我没有它有什么区别?

3 个答案:

答案 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。

http://dev.mysql.com/doc/refman/5.1/en/select.html