MYSQL 字符串拆分和多表记录合并的问题

bandaoyu 2019-02-25 03:00:43

映射表1

devcode lineTable

“s300” “table001,table002”
“s350” “table001,table002,table003”



devcode 是设备类型 lineTable是字符串,里面记录1-n个表名,由逗号隔开,

table001、table002、table003 结构都是一样的

创建一个事件,如何写SQL脚本,

当映射表1 修改时,根据被修改的的那一行,自动创建一个总表(如表已经存在就更新),将映射表1 lineTable字段内指定的所有表的记录,结果合并 并存放到总表中?

比如:s300 对应的“table001,table002” 改成“table001,table003”,则 获取lineTable 字段,分析出字符串内的表名 table001、table003,查询table001、table003
的数据,将数据合并到表s300LineTbale 中。



请问如何实现?
...全文
403 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2019-03-04
  • 打赏
  • 举报
回复
mysql把字段进行逗号分隔成多条数据,由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式。即同一个列中存储了多个属性值(具体结构见下表)。
这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。
表数据:
ID  Value
1 tiny,small,big
2 small,medium
3 tiny,big
期望得到结果:
ID Value
1 tiny
1 small
1 big
2 small
2 medium
3 tiny
3 big
备注:a.mSize 改为对应字段名

select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1)

from

tbl_name a

join

mysql.help_topic b

on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1)

order by a.ID;
https://www.2cto.com/database/201704/635342.html
另:https://blog.csdn.net/c_molione/article/details/82968554
AHUA1001 2019-02-28
  • 打赏
  • 举报
回复
这个要写存储过程了吧,怎么感觉不像是数据库做的事呢,建议改一下设计吧。
lgjlry 2019-02-27
  • 打赏
  • 举报
回复
拼接SQL 举例: select @tableName:='sys_office'; set @sql=CONCAT('select * from ',@tableName); PREPARE stmt FROM @sql; EXECUTE stmt
lgjlry 2019-02-27
  • 打赏
  • 举报
回复
是改变了更新记录吗

56,803

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧