mysql分隔存储id如何通过正则表达式查询

场景:ba_ids存的是a表的主键

SELECT 
    b.id,
    b.a_ids,
    GROUP_CONCAT(a.name) AS names  
FROM
    b
JOIN 
    a ON CONCAT(',', b.a_ids, ',') RLIKE CONCAT(',', a.id, ',')
GROUP BY
    b.id, 
    b.a_ids;
  • RLIKE是正则匹配操作符
  • CONCAT(',',b.a_ids,',')把表b的a_ids字段值前后各加一个逗号,如原值为'1,2,3'会变成',1,2,3,'
  • CONCAT(',',a.id,',')把表a的id字段值前后也各加一个逗号,如id为1会变成',1,'
  • RLIKE操作符是正则匹配,判断右侧的模式是否存在于左侧的字符串中
  • 所以整个条件的意思是:表b的a_ids字段的逗号分隔字符串中包含表a当前记录的id

zed
请先登录后发表评论
  • latest comments
  • 总共0条评论