更新查询不会影响数据库中的所有行

时间:2010-05-28 18:25:31

标签: mysql sql-update

我有以下查询......

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)

3 个答案:

答案 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), "%");