MYSQL中将一条记录拆分成多条记录,求存储过程

cryst2l 2012-10-30 12:30:42



~~~~~~~~~~~~~~
~~~~~~~~~~~~~~
...全文
1065 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cryst2l 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

效率不会高,处理字符内容时一定要定好规则
[/Quote]

已经顺利处理完毕,非常谢谢!!
WWWWA 2012-10-31
  • 打赏
  • 举报
回复
效率不会高,处理字符内容时一定要定好规则
cryst2l 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

LSB1,字段ID,值1、2、3、4、5。。。10000
这种 (恒泰|楚留)&香米 处理好了
SELECT *,`product_id`,
CONCAT(
IF(INSTR(`product_rule`,'|')<INSTR(`product_rule`,'&'),'',aa1),
IF(LENGTH(aa1)>0 AND INSTR(`product_rule`,'……
[/Quote]

持续关注,测试中
WWWWA 2012-10-31
  • 打赏
  • 举报
回复
LSB1,字段ID,值1、2、3、4、5。。。10000
这种 (恒泰|楚留)&香米 处理好了
SELECT *,`product_id`,
CONCAT(
IF(INSTR(`product_rule`,'|')<INSTR(`product_rule`,'&'),'',aa1),
IF(LENGTH(aa1)>0 AND INSTR(`product_rule`,'|')>INSTR(`product_rule`,'&'),'&',''),AA,
IF(INSTR(`product_rule`,'|')<INSTR(`product_rule`,'&'),CONCAT('&',aa1),'')
) AS aa2


FROM (
SELECT *,SUBSTRING_INDEX(
SUBSTRING_INDEX(A1.NA,'|',b.id),'|',-1) AS AA

FROM (SELECT AA1,`product_id`,`product_rule`,
IF(LENGTH(aa1)>0,
REPLACE(REPLACE(REPLACE(`product_rule`,
CONCAT(
IF(INSTR(`product_rule`,'|')<INSTR(`product_rule`,'&'),'&',''),aa1,
IF(INSTR(`product_rule`,'|')<INSTR(`product_rule`,'&'),'','&')),''),')',''),'(',''),
`product_rule`) AS NA FROM (
SELECT *,
IF(INSTR(A1.`product_rule`,'&(')>0,LEFT(A1.`product_rule`,INSTR(A1.`product_rule`,'&(')-1),
IF(INSTR(A1.`product_rule`,'|')<INSTR(A1.`product_rule`,'&'),RIGHT(A1.`product_rule`,CHAR_LENGTH(A1.`product_rule`)-INSTR(A1.`product_rule`,'&')),
'')) AS AA1
FROM `cfg_product` A1
WHERE INSTR(A1.`product_rule`,'|')>0) AA) a1 LEFT JOIN lsb1 b
ON (LENGTH(A1.NA)-LENGTH(REPLACE(A1.NA,'|','')))+1>=b.id) PP
cryst2l 2012-10-31
  • 打赏
  • 举报
回复
晕 你们两不是一个人开的马甲吧???
WWWWA 2012-10-31
  • 打赏
  • 举报
回复
如果问题已经解决了,点管理结贴吧
cryst2l 2012-10-30
  • 打赏
  • 举报
回复
不要啊[Quote=引用 2 楼 的回复:]

太长了 放弃

自己用select输出慢慢调试吧
[/Quote]
rucypli 2012-10-30
  • 打赏
  • 举报
回复
太长了 放弃

自己用select输出慢慢调试吧
cryst2l 2012-10-30
  • 打赏
  • 举报
回复
我写的存储过程会得到很多重复的记录,请高手指点
wwwwb 2012-10-30
  • 打赏
  • 举报
回复
用11楼的既可
cryst2l 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

SQL code
mysql> SET NAMES GBK
-> ;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT `product_id`,CONCAT(aa1,IF(LENGTH(aa1)>0,'&',''),AA) AS aa1 FRO

-> SELECT *,SUBSTRING_INDEX(
-……
[/Quote]


语句漏了几个。。。麻烦补上 可以吗
wwwwb 2012-10-30
  • 打赏
  • 举报
回复
要求格式固定,比如
(恒泰|楚留)&香米->
香米&(恒泰|楚留)

否则要专门曾这种情况做处理

SELECT *,`product_id`,CONCAT(aa1,IF(LENGTH(aa1)>0,'&',''),AA) AS aa1 FROM (
SELECT *,SUBSTRING_INDEX(
SUBSTRING_INDEX(A1.NA,'|',b.id),'|',-1) AS AA

FROM (SELECT AA1,`product_id`,
IF(LENGTH(aa1)>0,
REPLACE(REPLACE(REPLACE(`product_rule`,CONCAT(AA1,'&'),''),')',''),'(',''),`product_rule`) AS NA FROM (
SELECT *,IF(INSTR(A1.`product_rule`,'&(')>0,LEFT(A1.`product_rule`,INSTR(A1.`product_rule`,'&(')-1),'') AS AA1
FROM `cfg_product` A1
WHERE INSTR(A1.`product_rule`,'|')>0) AA) a1 LEFT JOIN lsb1 b
ON (LENGTH(A1.NA)-LENGTH(REPLACE(A1.NA,'|','')))+1>=b.id) PP
wwwwb 2012-10-30
  • 打赏
  • 举报
回复


~~~~~~~~~~
~~~~~~~~~~
wwwwb 2012-10-30
  • 打赏
  • 举报
回复
注意看看4楼的说明
lsb1:字段ID,内容1-100000
cryst2l 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

就是用1楼你给的数据
[/Quote]

Query : SELECT `product_id`,CONCAT(IF(LENGTH(AA1)>0,'&',''),AA) FROM ( SELECT *,SUBSTRING_INDEX(SUBSTRING_INDEX(A1.NA,'|',b.id),'|',-1...

Error Code : 1146
Table 'test.lsb1' doesn't exist

Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
---------------------------------------------------

wwwwb 2012-10-30
  • 打赏
  • 举报
回复
就是用1楼你给的数据
cryst2l 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

SP没有看,给你个SQL示例,已经测试通过

lsb1:字段ID,内容1-100000

SELECT `product_id`,CONCAT(IF(LENGTH(AA1)>0,'&',''),AA) FROM (
SELECT *,SUBSTRING_INDEX(
SUBSTRING_INDEX(A1.NA,'|',b.id),'|',-1) AS AA

FROM ……
[/Quote]


你的测试数据和表结构是sql 可以贴下吗
wwwwb 2012-10-30
  • 打赏
  • 举报
回复
空格原理相同,自行修改
wwwwb 2012-10-30
  • 打赏
  • 举报
回复
SP没有看,给你个SQL示例,已经测试通过

lsb1:字段ID,内容1-100000

SELECT `product_id`,CONCAT(IF(LENGTH(AA1)>0,'&',''),AA) FROM (
SELECT *,SUBSTRING_INDEX(
SUBSTRING_INDEX(A1.NA,'|',b.id),'|',-1) AS AA

FROM (SELECT AA1,`product_id`,
REPLACE(REPLACE(REPLACE(`product_rule`,CONCAT(AA1,'&'),''),')',''),'(','') AS NA FROM (
SELECT *,IF(INSTR(A1.`product_rule`,'&(')>0,LEFT(A1.`product_rule`,INSTR(A1.`product_rule`,'&(')-1),'') AS AA1
FROM `cfg_product` A1
WHERE INSTR(A1.`product_rule`,'|')>0) AA) a1 LEFT JOIN lsb1 b
ON (LENGTH(A1.NA)-LENGTH(REPLACE(A1.NA,'|','')))+1>=b.id) PP
;

56,687

社区成员

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

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