如何获取table1的所有列和属于table1的table2的所有行?

时间:2016-11-18 09:12:48

标签: mysql sql

这是我的表/实体:

articles
- id
- title
- body

keywords
- id
- fk_article_id
- title

一篇文章可以有多个关键字(一对多关系,多对多关键)。属于一篇文章的关键字可以是1,2,3,4,5,6,7,8,9 ......关键字。

选择1篇文章的标题和正文以及所有关键字的标题的最佳方法是什么?

结果示例:

- article.title
- article.body
-- keyword1.title
-- keyword2.title
-- keyword3.title

如果我进行INNER JOIN,那么我会获得相同的文章标题和正文两次。这可以用GROUP BY完成,还是应该使用NESTED语句?

我试过的INNER JOIN,但显然不是正确的解决方案:

SELECT articles.title, articles.body, keywords.title
FROM articles
INNER JOIN keywords
ON articles.id = keywords.fk_article_id
WHERE articles.id = 1

1 个答案:

答案 0 :(得分:2)

对于样本,假设你有

articles
id   | title | body
----  -----   -----
1    | Harry Potter | text 
2    | LOTR | text text

keywords
id   | title 
----  -----   
1    |  magic
1    |  stick
2    | dwarf
2    | ring

如果执行以下查询

Select a.title,a.body,group_concat(k.title ) from articles a JOIN keywords k ON a.id=k.id group by a.id

它会回来 哈利波特,(魔术,棒) LOTR,(侏儒,环)