SQL:获取具有至少N个其他公共实体的实体对

时间:2019-03-18 21:53:58

标签: sql

采用基本数据库架构:

ansible <hostname> -m setup -a "filter=ansible_local"

在帖子和标签之间具有多对多的关系,因此有一个posts_tags链接表:

posts,
  - id,   -- PK
  - title
tags,
  - id,   -- PK
  - value

我想获得标签对(例如,标签“ sport”和“ international”),它们至少具有N个共同点。如何在SQL中做到这一点?

1 个答案:

答案 0 :(得分:3)

SELECT
    pt1.tag_id,
    pt2.tag_id
FROM
    posts_tags pt1
JOIN
    posts_tags pt2 ON
        pt1.post_id = pt2.post_id
        AND pt1.tag_id < pt2.tag_id
GROUP BY
    pt1.tag_id,
    pt2.tag_id
HAVING
    COUNT(*)>10