【问题标题】:Many to Many association select query多对多关联选择查询
【发布时间】:2018-02-26 20:00:02
【问题描述】:

我有 3 张桌子。

用于关联的帖子、标签和帖子标签

帖子

id, title .content

标签

id, name

posts_tags

post_id,
tag_id

当我选择一个帖子时,我只想获取与特定帖子相关联的所有标签,就像这样

发布 id、标题、内容、标签

我一直在编写 SQL 查询,如果有人帮助我,将不胜感激

【问题讨论】:

  • 你已经尝试了什么?请分享查询。
  • 选择posts.title、posts.content、tag.name作为posts的标签,tags left join posts_tags on posts.id = posts_tags.post_id left join posts_tags on tags.id = posts_tags.tag_id where post_id = 1

标签: sql postgresql


【解决方案1】:

可以通过Join简单实现

SELECT p.id, p.title, p.content, t.name  FROM posts as p
INNER JOIN posts_tags as pt on p.id=pt.post_id
INNER JOIN tags as t on t.id = pt.tag_id

一篇文章

SELECT p.id, p.title, p.content, t.name  FROM posts as p
INNER JOIN posts_tags as pt on p.id=pt.post_id
INNER JOIN tags as t on t.id = pt.tag_id
WHERE p.id = 1

【讨论】:

  • 谢谢,当我使用 WHERE 条件时,我可以使用 DISTINCT 到 t.name 来获取一行吗?
  • 如果您需要一个帖子 ID 的数据,请使用“WHERE p.id = 1”
  • Distinct t.name 意味着,当您将上述查询与“Where”一起使用时,您得到了重复的标签名称
【解决方案2】:

让我们试试这个

select posts.title, posts.content, tag.name as tags from posts
inner join posts_tags on posts.id =  posts_tags.post_id
inner join tags on posts_tags.tag_id = tags.id

但最好使用别名作为表名

select p.id, p.title, p.content, t.name from posts as p
inner join posts_tags as pt on p.id=pt.post_id
inner join tags as t on t.id = pt.tag_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多