在3个表中使用多个左连接的mysql查询?

在3个表中使用多个左连接的mysql查询?,mysql,sql,Mysql,Sql,我有一个搜索查询,它将从3个表中检索信息。我做了这个查询,所以它从2个表中检索信息,我不知道是否可以合并第三个表 SELECT * FROM articles INNER JOIN terms ON articles.ArticleID = terms.RelatedID AND terms.TermType = 'article' 第三个问题是 SELECT * FROM categories where CategoryID in (something) 文章表中的某个字段的值类似于“3

我有一个搜索查询,它将从3个表中检索信息。我做了这个查询,所以它从2个表中检索信息,我不知道是否可以合并第三个表

SELECT *
FROM articles
INNER JOIN terms
ON articles.ArticleID = terms.RelatedID AND terms.TermType = 'article'
第三个问题是

SELECT * FROM categories where CategoryID in (something)
文章表中的某个字段的值类似于“3,5,8”


我想将这两个查询合并成一个查询,我不知道是否可以通过一个查询来完成,而不需要查看您的模式(这会很有帮助),一些示例数据可以尝试此查询

SELECT * FROM categories,articles INNER JOIN terms ON (articles.ArticleID = terms.RelatedID AND terms.TermType = 'article') WHERE FIND_IN_SET(categories.CategoryID,articles.categories) 挑选* 从类别、文章 内部联接项 在(articles.ArticleID=terms.RelatedID和terms.TermType='article') 哪里 在_集中查找_(categories.CategoryID,articles.categories) 以下是
FIND\u IN\u SET()的定义


如果我理解正确的话。看起来每个文章都有多个类别,类别ID都存储为串联字符串

SELECT A.*
FROM articles A
INNER JOIN terms T on A.ArticleID = T.RelatedID AND T.TermType = 'article'
LEFT JOIN categories C on C.CategoryID IN (3,5,8 OR A.CategoryIDs)
GROUP BY C.CategoryName

您想左联接,因为您可能有多个类别,也可能没有多个类别,您可以按类别分组以获得disticnt category article pairs,并按需要使用CONCAT()重新组合项目记录。

类别表中是否有与articles或terms表中的字段相匹配的字段?您将需要一个字段来联接它们。@Tom项目表中有一个字段ArticleCategories,其值为“3,5,8”,这些字段是类别ID(取决于这些表的大小)。您可能需要确保为联接中的每个字段都设置了索引。ID为[3,5,8]的字段仍可能导致寻道。我绝对建议将该数据规范化为一个简单的Article_Category表,并对其进行索引。