【问题标题】:How can I return results based on column from second inner join?如何根据第二个内部连接的列返回结果?
【发布时间】:2017-10-12 23:57:33
【问题描述】:

我有以下表格:

标签:

| id | title |

类别

| tag_id (FK tags.id) | category_tag_id (FK tags.id) | 

category_tag_id 引用 tags.id 因为我们正在重复使用 tags 表(我们可以简单地将类别分配给具有此表的标签

文章

| id | title | body | etc... |

articles_tags

| article_id (FK articles.id) | tag_id (FK tags.id) |

我正在尝试创建一个查询来选择与此技能相关的所有类别。我们通过搜索 articles_tags 表中链接的标签来获取类别,然后我们只需要通过检查 categories 表来检查哪些类别与这些标签相关联。

这是我尝试过的

select tags.* 
FROM tags 
INNER JOIN categories ON tags.id = categories.tag_id
INNER JOIN article_tags ON article_tags.article_id = ID_OF_ARTICLE_WE_WANT_CATEGORIES_FROM

我也尝试添加一个

where article_id = ID_OF_ARTICLE_WE_WANT_CATEGORIES_FROM 

但是,此查询似乎返回所有类别,而不仅仅是与技能相关的类别。

【问题讨论】:

标签: mysql sql postgresql


【解决方案1】:
select tags.* 
FROM tags 
INNER JOIN categories ON tags.id = categories.tag_id
INNER JOIN article_tags ON article_tags.article_id = ID_OF_ARTICLE_WE_WANT_CATEGORIES_FROM

在您的查询中,表 article_tags 实际上并没有连接到其他任何东西。查看您提供的架构,似乎article_tags 通过 (article_tags.tag_id -> tags.id) 与tags 相关

试试这个查询:

SELECT tags.* 
FROM tags 
INNER JOIN categories ON tags.id = categories.tag_id
INNER JOIN article_tags ON article_tags.article_id = tags.id
WHERE article_tags.article_id = :user_input

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2013-01-23
    • 2022-12-17
    • 2017-03-07
    相关资源
    最近更新 更多