当一对多不构成中间表时,经常将“多”以分隔符的形式存储在“一”的一个字段中。 其代价是,不能像一对多时那样直接关联查询。 一般来说,在程序中采用分割分开查询的方法。 下图:
如何直接在sql语句中查找下图的效果?
可以使用没有除连续id以外字段的序列号表。 id的值范围取决于保存在“1”中的信息被分割的数量。
实现sql :
选择
名称,
替换(
substring_index(mobile,',',a.id ),
CONCAT (
substring _ index (移动、'、'、a.id - 1 )、
','
请参阅。
''
) As移动
来自
squence a
CROSS JOIN (
选择
名称,
concat(mobile,',') AS mobile,
length(mobile )-length (replace ) mobile、'、'、'')1 AS size
来自
`用户`
) b ON a.id=b.size