如何根据第二个内连接的列返回结果?

时间:2017-10-12 23:57:33

标签: mysql sql postgresql

我有以下表格:

标签:

| 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 表中链接的标记来获取类别,然后我们只需要通过选中类别表来检查与这些标记关联的类别。< / p>

以下是我尝试的内容

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 

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

1 个答案:

答案 0 :(得分:0)

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_tagstags相关(article_tags.tag_id - &gt; tags.id

尝试此查询:

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