我有以下查询......
UPDATE vehicle_catalog SET parent_id = 0 WHERE parent_id = SUBSTR(id, 0, 5)
我需要将所有parent_id
设置为0,其中id的前5个字符与parent_id相同。当我查看数据时,这会产生0行,并且它应该影响超过10,000。
关于为什么这不会影响所有行的任何想法?
更新
如果我这样做,我不明白
UPDATE SET col = '1'
它会影响整个数据库,但我的查询不会在整个数据库上运行。
更新 正确的解决方案:
UPDATE `vehicle_catalog` SET parent = 0 WHERE SUBSTRING(id FROM 1 FOR 6) == SUBSTRING(parent_id FROM 1 FOR 6)
答案 0 :(得分:2)
SUBSTR() in MySQL使用基于1的索引。试试这个:
UPDATE vehicle_catalog SET parent_id = 0 WHERE parent_id = SUBSTR(id, 1, 5)
另外,请参阅我对使用SELECT查询验证您的条件是否正确构建的评论。
答案 1 :(得分:0)
只是一个猜测,但
WHERE parent_id = SUBSTR(id, 0, 5)
,或者,它应该是......
WHERE SUBSTR(parent_id, 0, 5) = SUBSTR(id, 0, 5)
答案 2 :(得分:0)
您的更新只会影响写入的单行。例如,如果ID为12345678,则您的查询只会更新第12345行。您可以尝试使用
UPDATE vehicle_catalog SET parent_id = 0
WHERE parent_id like concat(SUBSTR(id, 0, 5), "%");