由于#1093错误,我可以使用此选择子句吗?

时间:2019-05-22 11:20:05

标签: mysql

我的数据库中有一个表,其中包含约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      

但是现在我想在数据库中更改它,而我正在努力更新数据库中的记录,因为它给了我这个错误

1093-您不能在FROM子句中指定要更新的目标表“部分”

在我使用过的查询下面

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知识,我无法解决这个难题。 这种使用选择的方式正确吗?
我必须进行哪些更改才能使其正常工作?

0 个答案:

没有答案