我的数据库中有一个表,其中包含约300.000条记录,列标题以数字9开头。
当前记录包含15个这样的字符:
929-95X6C-00-00
这些值中的大约100.000的第一个连字符的位置不正确,应该在位置6而不是3上。也可以删除3个当前连字符中的一个。我设法创建了一个嵌套的select子句,它为我提供了正确的格式。我
92995-X6C00-00
选择子句
SELECT CONCAT(SUBSTRING_INDEX(`number`,'-',2),SUBSTRING_INDEX(`number`,'-',-2)) AS str1,
(SELECT CONCAT(SUBSTRING_INDEX(str1,'-',1),SUBSTRING_INDEX(str1,'-',-2))) AS str2,
(select concat(left(str2, 5), '-', substring(str1, 7))) AS str3
FROM `parts`
WHERE `number` LIKE '9%'
AND LOCATE( '-', `number` , 3 ) < 5
但是现在我想在数据库中更改它,而我正在努力更新数据库中的记录,因为它给了我这个错误
在我使用过的查询下面
UPDATE `parts` SET `number` = (
SELECT CONCAT(SUBSTRING_INDEX(`number`,'-',2),SUBSTRING_INDEX(`number`,'-',-2)) AS str1,
(SELECT CONCAT(SUBSTRING_INDEX(str1,'-',1),SUBSTRING_INDEX(str1,'-',-2))) AS str2,
(select concat(left(str2, 5), '-', substring(str1, 7))) AS str3
FROM `parts`
WHERE `number` LIKE '9%'
AND LOCATE( '-', `number` , 3 ) < 5 )
因此,在互联网上搜索以解决这一问题后,我还遇到了一些关于stackoverflow上#1093的帖子。
到目前为止,我知道我不能两次使用“部件”表。
不幸的是,由于我缺乏MySql知识,我无法解决这个难题。
这种使用选择的方式正确吗?
我必须进行哪些更改才能使其正常工作?