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

时间:2012-10-03 23:22:48

标签: 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,5,8”

我想在1个查询中执行此2个查询,我不知道是否可以通过1个查询完成

2 个答案:

答案 0 :(得分:1)

不查看您的架构(这会有所帮助),并且一些示例数据会尝试此查询

SELECT *
FROM categories,articles
INNER JOIN terms
ON (articles.ArticleID = terms.RelatedID AND terms.TermType = 'article')
WHERE
FIND_IN_SET(categories.CategoryID,articles.categories)

这里是FIND_IN_SET()

的定义

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

答案 1 :(得分:0)

如果我理解正确的话。看起来每个文章都有多个类别,其中类别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

您想要LEFT JOIN,因为您可能有或可能没有多个类别,您可以按类别分组以获取disticnt类别文章对,而CONCAT()则根据需要重新组合文章记录。