Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在本例中如何使用内部联接_Mysql_Sql_Join - Fatal编程技术网

Mysql 在本例中如何使用内部联接

Mysql 在本例中如何使用内部联接,mysql,sql,join,Mysql,Sql,Join,我正在学习mysql连接,我有一个简单的问题: 我有一个数据库和两个表blogs和tags 博客: MariaDB [cvv]> describe blogs; +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------

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

我有一个数据库和两个表
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)
标签:

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

SELECT  blogs.id, blogs.title tags.name as tags FROM blogs INNER JOIN tags ON blogs.id = tags.blog_id  
但此查询一次返回的标记不超过1个

例如,我创建了一个博客id,title。。在标签中,我创建了两个标签,它们的
blog\u id
都是1,所以我应该得到blog id,title和两个标签,但我只得到一个

另外,我在
标签
表中引用了约束名称
blog\u id
引用blog的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 ;
应该返回多行,每行一个blog/标记对

如果希望博客的所有标记位于同一行,则需要聚合结果:

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;
此查询:

SELECT b.id, b.title, t.name as tags
FROM blogs b INNER JOIN 
     tags t
     ON b.id = t.blog_id ;
应该返回多行,每行一个blog/标记对

如果希望博客的所有标记位于同一行,则需要聚合结果:

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;

@戈登·林诺夫是正确的;必须将合并的数据合并到一列中。SQL非常强大,但它不容易处理不均匀的行。@gordon linoff是正确的;必须将合并的数据合并到一列中。SQL非常强大,但它不容易处理不均匀的行。我喜欢第二个示例,但是我可以得到带有/不一致的标记吗?我是说,只是分开排列?@hidar。MySQL中没有数组这样的东西。我喜欢第二个例子,但是我可以得到带有/out concatation的标签吗?我是说,只是分开排列?@hidar。MySQL中没有数组这样的东西。