0

我有 3 张桌子:

  1. 页面(id,名称,描述)
  2. page_tags(id, page_id, tag_id)
  3. tag_posts(tag_id, post_id)

给定 pages 表中的一个页面,我想获取 tag_posts 表中的帖子,其中 tag_id 与 page_tags 表中给定页面的所有tag_id 匹配。

例如,如果 3 个表中的条目是:

1)页面:

  1. [1, '第 1 页', '一些描述']

2)page_tags:

  1. [1, 1, 1],
  2. [2, 1, 2]

3)标签帖子:

  1. [1, 101],
  2. [2, 102],
  3. [1, 201],
  4. [3, 202]

我使用此查询对 3 个表进行了简单的内部连接:

SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE 1

但是,这会从上面的示例 tag_posts 表中返回第 1、2 和 3 行,而我只需要第 1 和 2 行,因为这两行与pages 和 page_tags 表之间的第一个连接中的所有tag_id 行匹配。

请让我知道如何实现这一目标。注意:我使用的是 mysql。

4

1 回答 1

1

我很困惑。tag_post 表确实有 3 个匹配项(第 1 行、第 2 行和第 3 行),因为 tag_post where tag_id = 1 匹配了两次。所以我会说你所看到的它是正确的。

如果您正在尝试查找指定页面的 tag_posts,那么查询将是这个...

SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE p.id = 1
于 2013-10-15T03:07:34.207 回答