首页 > 解决方案 > 在这个例子中如何使用 INNER JOIN

问题描述

我正在学习 mysql joins,我有一个简单的问题:

我有一个数据库和两个blogstags

博客:

MariaDB [cvv]> describe blogs;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| slug         | varchar(255) | YES  |     | NULL    |                |
| title        | varchar(255) | YES  |     | NULL    |                |
| content      | text         | YES  |     | NULL    |                |
| created_at   | datetime     | YES  |     | NULL    |                |
| updated_at   | datetime     | YES  |     | NULL    |                |
| user_id      | int(11)      | YES  |     | NULL    |                |
| is_published | tinyint(1)   | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

标签:

MariaDB [cvv]> describe tags;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(15) | YES  |     | NULL    |                |
| blog_id | int(11)     | YES  | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

基本上我正在尝试使用以下方法获取博客及其标签:

SELECT  blogs.id, blogs.title tags.name as tags FROM blogs INNER JOIN tags ON blogs.id = tags.blog_id  

但是这个查询一次不会返回超过 1 个标签。

例如,我创建了一个博客 ID、标题 .. 并在标签中创建了两个标签,它们都有blog_id1,所以我应该得到博客 ID、标题和两个标签,但我只得到一个。

另外,我在表中使用了引用博客 id 的 tags约束名称,即:blog_idblog.id

标签: mysqlsqljoin

解决方案


这个查询:

SELECT b.id, b.title, t.name as tags
FROM blogs b INNER JOIN 
     tags t
     ON b.id = t.blog_id ;

应该返回多行,每行一个博客/标签对。

如果您希望博客的所有标签位于同一行,则需要汇总结果:

SELECT b.id, b.title, GROUP_CONCAT(t.name) as tags
FROM blogs b INNER JOIN 
     tags t
     ON b.id = t.blog_id
GROUP BY b.id, b.title;

推荐阅读