mysql中支持根据符号 将一行数据分割成多行。
(1)数据初始化
CREATE TABLE example (
`id` INT (20) DEFAULT NULL,
`address` VARCHAR (100) DEFAULT NULL,
`name` VARCHAR (100) DEFAULT NULL,
`shareholder` VARCHAR (100) DEFAULT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8;
INSERT INTO example VALUES (1, '华盛顿','国会', '小明,小王');
INSERT INTO example VALUES (2, '东京','富士山', '小孙,小苏,小刚');
INSERT INTO example VALUES (3, '上海','外滩', '小风');
(2)查询语句 根据逗号分割
SELECT
a.id,
a.address,
a.name,
substring_index(
substring_index(
a.shareholder,
',',
b.help_topic_id + 1
),
',' ,- 1
) AS shareholder
FROM
example a
JOIN mysql.help_topic b ON b.help_topic_id < (
length(a.shareholder) - length(
REPLACE (a.shareholder, ',', '')
) + 1
);
查询结果:
(3)常见问题 一般测试环境没问题,线上环境数据库会涉及到权限问题。 可能会报如下错误:
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
SELECT command denied to user 'autochain_uat'@'localhost' for table 'help_topic' ###
问题原因: help_topic是mysql库下的一张表, 使用help_topic时为了解决行转列的问题,出现上面错误是因为用户没有这张表的权限。
解决方法:
可以执行该SQL:GRANT SELECT ON mysql.help_topic TO 'autochain_uat'@'localhost'(给用户赋权限);
取消用户权限SQL:REVOKE SELECT ON mysql.help_topic FROM 'autochain_uat'@'localhost';