[英]How to use INNER JOIN in this example
我正在学习有关mysql join的问题,我有一个简单的问题:
我有一个数据库和两个表格blogs
和tags
博客:
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_id
均为1,因此,我应该获取博客ID,标题为两个标签,但我只有一个。
另外,我在tags
表中使用约束名称blog_id
引用了博客的ID,即blog.id
该查询:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.