【问题标题】:Update query not effecting all rows in database更新查询不影响数据库中的所有行
【发布时间】:2010-05-28 18:25:31
【问题描述】:

我有以下问题......

UPDATE vehicle_catalog SET parent_id = 0 WHERE parent_id = SUBSTR(id, 0, 5)

我需要将所有parent_ids 设置为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)

【问题讨论】:

  • 您可以尝试运行 SELECT * FROM vehicle_catalog WHERE parent_id = SUBSTR(id, 0, 5) 吗?这将返回您的查询将影响的行。如果 SELECT 没有返回您需要更新条件的任何行;如果它返回你所期望的,那么就会发生其他事情。

标签: mysql sql-update


【解决方案1】:

SUBSTR() in MySQL 使用从 1 开始的索引。试试这个:

UPDATE vehicle_catalog SET parent_id = 0 WHERE parent_id = SUBSTR(id, 1, 5)

另外,请参阅我对使用 SELECT 查询来验证您的条件是否正确构造的评论。

【讨论】:

    【解决方案2】:

    只是猜测,但是

    WHERE parent_id = SUBSTR(id, 0, 5),或者,应该是……

    WHERE SUBSTR(parent_id, 0, 5) = SUBSTR(id, 0, 5)
    

    【讨论】:

      【解决方案3】:

      您的更新只会影响写入的单行。例如,如果 ID 为 12345678,则您的查询只会更新第 12345 行。您可以试试这个

      UPDATE vehicle_catalog SET parent_id = 0 
      WHERE parent_id like concat(SUBSTR(id, 0, 5), "%");
      

      【讨论】:

      • 这也不起作用,将所有值替换为 0
      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多