mySQL将含逗号的字符串分成一个集合(行转列),不使用交叉连接
时间: 2024-01-24 10:02:30 浏览: 140
MySQL 字符串函数大全
如果你不想使用交叉连接,也可以使用MySQL内置的`SUBSTRING_INDEX()`函数和`UNION ALL`语句来将含逗号的字符串分成一个集合(行转列)。以下是示例代码:
```sql
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(names, ',', n), ',', -1) AS name
FROM (
SELECT id, CONCAT(names, ',') AS names
FROM table_name
) t
CROSS JOIN (
SELECT 1 n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
) numbers
WHERE n <= 1 + LENGTH(names) - LENGTH(REPLACE(names, ',', ''))
ORDER BY id, n;
```
其中,`id`是你的表中的唯一标识符列,`names`是你要分割的含逗号的字符串列。这条语句会将每个`id`的所有`name`字段的值转成一行,例如:
| id | name |
| --- | ---- |
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 2 | E |
| 2 | F |
| 2 | G |
| 3 | H |
请注意,由于这种方法需要使用`UNION ALL`语句,可能会导致性能问题,特别是当你的表中有大量数据时。如果你需要使用这种方法,请确保你的表中的数据量不会导致性能问题。
阅读全文