美文网首页
mysql查询逗号分隔的数据

mysql查询逗号分隔的数据

作者: sunpy | 来源:发表于2023-02-03 11:09 被阅读0次

表结构

# 用户表
CREATE TABLE `user` (
  `user_id` varchar(36) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `hobby_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

#爱好表
CREATE TABLE `hobby` (
  `hobby_id` varchar(4) NOT NULL,
  `hobby_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`hobby_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

插入数据

insert into user(user_id, name, hobby_id) values(UUID(), "张三", "1,2,3"),(UUID(), "李四", "1,2");

insert into hobby(hobby_id, hobby_name) values("1", "唱"),("2", "跳"),("3","rap");

将一个逗号分隔的字段转成多行记录

SELECT
    u.user_id AS userId,
    u.NAME AS userName,
    h.hobby_id AS hobbyId,
    h.hobby_name as hobbyName,
    u.hobby_id as uHobbyId
FROM
    education.user u
    LEFT JOIN education.hobby h ON FIND_IN_SET( h.hobby_id, u.hobby_id ) != 0
    group by u.user_id, h.hobby_id
    order by u.user_id ASC, h.hobby_id ASC;
  • find_in_set函数会根据字段里面的逗号分隔,所以我们存储的字段里面,最好用逗号分隔,如果内容也存在逗号,最好是采用主键关联,避免逗号影响结果。

合并字段

SELECT
    u.user_id AS userId,
    u.NAME AS userName,
    u.hobby_id as hobbyId,
    GROUP_CONCAT(h.hobby_name ORDER BY h.hobby_id ASC SEPARATOR '|') AS hobbyName
    
FROM
    education.user u
    LEFT JOIN education.hobby h ON FIND_IN_SET( h.hobby_id, u.hobby_id ) != 0
    group by u.user_id;

相关文章

网友评论

      本文标题:mysql查询逗号分隔的数据

      本文链接:https://www.haomeiwen.com/subject/nefnhdtx.html