MySql 替换字段中字符串的sql语句

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

打代码不耽误我 听歌,看小说,玩游戏。


        //  代表注释,写习惯了,看着舒服,带有//的那一行是我写的理解,请不要搞错了

最终语句,可以自行修改使用     

 
——————————————————————————————————以下sql语句本人只在mysql使用过,其他数据库上是否有效——————————————————————————————————
———————————————————————————————以下皆为本人的见解不确定是否真实,请勿过分相信,动手多练最有用———————————————————————————————
--2022-11-18
//替换字符串的最终语句,根据自已需求修改

UPDATE user set province=(SELECT left(province,2) from (SELECT pass from `user` as user0 where province like '省')as a 
where a.pass=`user`.pass) where id in 
((SELECT id from (SELECT `name` from user where province like '%省')as user1 where user1.name=`user`.`name`))

--2022-11-19
//动态查询并且跨数据库查询表,将查询出来的数据作为数据库名拼接要查询的表名
//我在这个表里添加了dataName字段,里面是与name对应的数据库的名字
————动态sql语句使用链接 https://www.cnblogs.com/mfmdaoyou/p/6704521.html

set @checkUser=concat('SELECT * FROM ',(SELECT dataName FROM web_manage where name='拼多多'),'.user');
prepare stml from @checkUser;
EXECUTE stml;

--2022-11-19
//动态跨数据库查询两张表中同一字段所有相同数据总数
set @checkUser=concat('SELECT province,count(*) FROM (SELECT province FROM ', (SELECT dataName FROM web_manage where name='拼多多'),'.user UNION ALL SELECT province FROM ',
(SELECT dataName FROM web_manage where `name`='QQ音乐'),'.user)t group by province');
prepare stml FROM @checkUser;
EXECUTE stml;

 sql 语句心得

——————————————————————替换字符串的语句,根据自已需求修改——————————————————————————

--因为ECharts里使用地图需要地图省份数据,一直手打数据也不是个办法
--我就去找了个生成数据的工具, datafaker ,这个是github开源项目
--而且数据生成有中文文档,挺好用的 链接 https://github.com/gangly/datafaker

//写这个sql语句是为了删除省份中多余字,比如北京省,天津市,内蒙古自治区
//都要删除,只保留北京、天津、内蒙古

//我使用 mysql数据库 我要实现一个在对应数据库中对多余字符串进行删除的功能
//把这个功能做成通用模板,以后要删除相同多余字符串用这个模板修改就能用了

//那么要截取字段数据我用的是left() ,是从左向右截取用法如下  
// left(要截取的字段,要截取的长度) 用法链接 
// https://blog.csdn.net/moakun/article/details/82086078

//中途遇到一些错误,比如:数据重复的错误,查出来的数据不能立即修改 
//例如

//查出来的数据不能立即修改的错误语句
UPDATE user set province=(SELECT left(province,2) from `user` as user0 
where province like '省')as a)
where id in (SELECT id from user where province like '%省')as user1)

//于是我就在网上找了下,要嵌套查询
//好像只有mysql有查出来的数据不能立即修改这个错误,这个错误再嵌套一层子查询就可以了
//然后如果查询结果数据重复就会报重复错误

//数据重复错误就需要将查询出来的结果字段改成别的字段 
//例如 name,最后再子查询表中的 name 获得结果的数据
//反正最后只要结果数据可以被找到就行.

//最终语句
UPDATE user set province=(SELECT left(province,2) from (SELECT pass from `user` as user0 where province like '省')as a 
where a.pass=`user`.pass) where id in 
((SELECT id from (SELECT `name` from user where province like '%省')as user1 where user1.name=`user`.`name`))

————————————动态查询并且跨数据库查询表,将查询出来的数据作为数据库名拼接要查询的表名,我在这个表里添加了dataName字段,里面是与name对应的数据库的名字——————————

//我想在页面上搞个根据不同网站名来管理对应的数据库的功能,所以先建一个表
//添加网站名以及对应的数据库名进一张表,记录了对应网站的数据库名字方便管理

//然后我写完语句发现表名无法加上去,然后使用 concat() 拼接字符串 链接
//https://www.cnblogs.com/yingmo/p/6148360.html

SELECT * FROM (SELECT concat(dataName,'.user') FROM web_manage where name='拼多多') as a;

//拼接成功了,但是结果还是对应的数据库名加表名,不是我想查询的数据库中user表中的数据
//到了这里我大概也知道查询出的是dataName字段数据的字符串
//它似乎不被sql当成一个变量,就像sql通过数据库名查询数据库中表的数据(我是这么理解的)

//然后我就找到了 sql动态语句 execute ,用来执行动态sql语句 —动态sql语句使用链接 https://www.cnblogs.com/mfmdaoyou/p/6704521.html

//最终结果
set @checkUser=concat('SELECT * FROM ',(SELECT dataName FROM web_manage where name='拼多多'),'.user');
prepare stml from @checkUser;
EXECUTE stml;
————————————动态查询并且跨数据库查询不同表中某一字段所有相同数据的总和——————————

//需要搞一个动态跨数据库查询不同表中某一字段所有相同数据的总和

// union 可以将两个查询结果合并但必须要有相同的列与相似的类型,类似表结构一致 链接 https://www.cnblogs.com/xiangshu/articles/2054447.html
//但因为我要获取的是相同省份的总数,所以不使用 union ,使用 union all
//sql 语句打少了,脑子转不过来想了几个小时,最后拿出笔和纸理一下可能性,一下就想通了
//下面有我放的图片

//最终代码
set @checkUser=concat('SELECT province,count(*) FROM (SELECT province FROM ', (SELECT dataName FROM web_manage where name='拼多多'),'.user 
union all SELECT province FROM ',
(SELECT dataName FROM web_manage where `name`='QQ音乐'),'.user)t group by province');
prepare stml FROM @checkUser;
EXECUTE stml;

 


总结

这里怎么还有个总结,总结,没有总结,全是坑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值