大家好,又见面了,我是你们的朋友全栈君。
一对多没有建立中间表的时候经常会采用分隔符的形式将“多”存储在“一”的一个字段里,这样做的代价是无法像一对多的时候那样直接关联查询,一般采用在程序中分割后分别查询的办法。如下图:
如何才能直接用sql语句查询出下图的效果呢?
可以借助一个序号表,该表中除了连续的id没有其它字段,id的值范围取决于”一”中存储的信息拆分后的数量。
实现sql:
SELECT
NAME,
REPLACE(
SUBSTRING_INDEX(mobile, ',', a.id),
CONCAT(
SUBSTRING_INDEX(mobile, ',', a.id - 1),
','
),
''
)AS mobile
FROM
squence a
CROSS JOIN(
SELECT
NAME,
CONCAT(mobile, ',')AS mobile,
LENGTH(mobile)- LENGTH(REPLACE(mobile, ',', ''))+ 1 AS size
FROM
`user`
)b ON a.id <= b.size
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139984.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...