有多少人加入枢轴需要获得不同的标签?

时间:2018-06-18 12:42:36

标签: mysql sql

我最近加入了一个项目。我正在检查代码,我遇到了这个问题:

SELECT p.*
FROM posts p
INNER JOIN pivot pi1 on p.id = pi1.post_id
INNER JOIN tags t1 on t1.id = pi1.tag_id and t1.name = "mysql"
INNER JOIN pivot pi2 on p.id = pi2.post_id
INNER JOIN tags t2 on t2.id = pi2.tag_id and t2.name = "php"

选择所有标有mysqlphp标记的帖子。我的问题是关于加入。为什么要两次加入pivot表?为什么不加入pivot一次并将其用于标记两次?

1 个答案:

答案 0 :(得分:2)

如果您想使用聚合,可以加入数据透视表一次:

SELECT p.*
FROM posts p
INNER JOIN pivot pi 
     ON p.id = pi.post_id
INNER JOIN tags t
     ON t.id = pi.tag_id AND t.name IN ('mysql', 'php')
GROUP BY p.id
HAVING COUNT(*) = 2;

在您的版本中,pivot中的一行无法匹配这两个值。所以,你需要两个连接。