MYSQL多行转一行
时间: 2024-09-26 21:18:57 浏览: 38
在MySQL中,多行转换为一行的操作通常是使用`GROUP_CONCAT()`函数或者`JSON_EXTRACT()`函数结合字符串函数。这两个函数主要用于将一组值合并为单个文本字符串。
例如,如果你有一个包含用户信息的表,有多个用户的联系信息作为一行记录,你想将其转换为每个用户仅有一行,联系信息由逗号分隔:
```sql
CREATE TABLE users (
id INT,
name VARCHAR(50),
contacts TEXT
);
INSERT INTO users VALUES (1, 'Tom', '123-456-7890, 098-765-4321');
```
你可以使用`GROUP_CONCAT()`函数来完成这个任务:
```sql
SELECT id, name, GROUP_CONCAT(DISTINCT contacts SEPARATOR ',') as combined_contacts
FROM users
GROUP BY id, name;
```
结果可能会像这样:
```sql
+----+------+-----------------------+
| id | name | combined_contacts |
+----+------+-----------------------+
| 1 | Tom | 123-456-7890, 098-765-4321|
+----+------+-----------------------+
```
如果你想保持每个联系信息独立显示,而不是用逗号分隔,可以考虑使用JSON相关的功能,比如将联系信息存储为JSON数组,然后提取:
```sql
SET @json = JSON_ARRAY(
CONCAT('{"id":', id, ',"contact":', contacts, '}'),
...
);
```
然后使用`JSON_EXTRACT()`提取:
```sql
SELECT JSON_EXTRACT(@json, '$[*].contact') as individual_contact
FROM (
SELECT JSON_OBJECT('id', id, 'contacts', contacts) as json_object
FROM users
) as user_with_json;
```
阅读全文