mysql行转列(拆分字符串场景)

mysql行转列(拆分字符串场景)一对多没有建立中间表的时候经常会采用分隔符的形式将“多”存储在“一”的一个字段里,这样做的代价是无法向一对多的时候那样直接关联查询,一般采用在程序中分割后分别查询的办法

大家好,又见面了,我是你们的朋友全栈君。

一对多没有建立中间表的时候经常会采用分隔符的形式将“多”存储在“一”的一个字段里,这样做的代价是无法像一对多的时候那样直接关联查询,一般采用在程序中分割后分别查询的办法。如下图:

mysql行转列(拆分字符串场景)

如何才能直接用sql语句查询出下图的效果呢?

mysql行转列(拆分字符串场景)

可以借助一个序号表,该表中除了连续的id没有其它字段,id的值范围取决于”一”中存储的信息拆分后的数量。

mysql行转列(拆分字符串场景)

实现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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139984.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Idea激活码永久有效Idea2020.2.2激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2020.2.2激活码教程-持续更新,一步到位Idea激活码永久有效2020.2.2激活码教程-Windows版永久激活-持续更新,Idea激活码2020.2.2成功激活

    2022年6月17日
    29
  • form实现表单提交的各种方法(表单提交源码)

    1、type=”submit”&amp;amp;amp;amp;amp;amp;lt;formname=”form”method=”post”action=”#&amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;inputtype=”submit”name=”submit”value=”提交&amp;amp;amp;amp;amp;quo

    2022年4月18日
    123
  • Linux resize2fs命令扩展文件系统出错[通俗易懂]

    Linux resize2fs命令扩展文件系统出错[通俗易懂]sudoresize2fs/dev/nvme0n1p1原因:Linux不同文件系统格式的文件需要使用不同命令查询文件系统格式df-T-h #列出文件系统格式扩展分区文件系统sudoxfs_growfs/dev/nvme0n1p1 #注意分区名要写对分区文件系统扩容完成…

    2022年10月21日
    6
  • android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”…

    android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”…在上一篇文章中,我整理并测试了六种来自国际力量的Android浏览器,包括流行的Chrome,具有丰富扩展功能的Firefox,具有隐私和安全性的FirefoxFocus,具有悠久历史的Opera,以及后来的MicrosoftEdge,Yandex除了主要国际制造商生产的产品外,国内开发商还致力于Android浏览器类别。他们希望在保持简单设计的基础上,寻求提供更多差异化的功能。这次我选择了五…

    2022年5月15日
    168
  • LocalDate转Date类型「建议收藏」

    LocalDate转Date类型「建议收藏」LocalDate转Date1.需要先将LocalDate转为LocalDateTimeLocalDate.atStartOfDay()2.获取Instance,需要指定时区,这里使用系统默认LocalDateTime.atZone(ZoneId.systemDefault()).toInstant()3.转化Date.from()连起来就是Date.from(LocalDate.now().atStartOfDay().atZone(ZoneId.sy

    2022年10月4日
    5
  • 电阻和电容的识别_电容电阻怎么区分

    电阻和电容的识别_电容电阻怎么区分一、贴片电阻阻值的读法贴片电阻的阻值通常以数字形式直接标注在电阻的表面,所以读电阻的阻值直接看电阻表面的数字即可。通常情况下有三种表示方法:(1)、由三个数字组成,表明电阻的误差是±5%。前面两位是有效数字,第三位数字表示乘零的倍数,即10的几次方,基本单位是Ω。例如:103,1和0是有效数字直接写下来即可,3表示乘零倍率,也就是10的2次方,所以103表示的阻值就是1010^3=1010…

    2022年8月21日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号