如何更新符合 SQL 中条件的许多行

How to update many rows which match conditions in SQL

我正在尝试更新数据库(一个 wordpress 电子商务安装)中的行,以便所有具有相同 id 的股票行为 0 的行当前设置为 'outofstock'得到错误 'SQL Error 1064'

UPDATE `squirrel`.`wp_postmeta`
SET LEFT(`meta_value`, 256) = 'outofstock'
WHERE `post_id` IN (SELECT `post_id` FROM `squirrel`.`wp_postmeta` WHERE 
`meta_key` = '_stock' 
AND LEFT(`meta_value`, 256) = 0) AND `meta_key` = '_stock_status'; 

我的代码有什么问题?

您应该使用 REPLACE 而不是 LEFT,因为它会给您 1064 错误

 UPDATE YourTable
 SET yourcolumn= REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')
 WHERE yourcolumn LIKE '%PATTERN%'

以上意见很有帮助,但后来又出现了其他问题。最后是解决方案

UPDATE `squirrel`.`wp_postmeta`
SET `meta_value` = 'outofstock'
WHERE `post_id` IN (SELECT * FROM (SELECT `post_id` FROM 
`squirrel`.`wp_postmeta` WHERE `meta_key` = '_stock'
AND `meta_value` = 0) AS custom)  AND `meta_key` = '_stock_status';

主要是通过根据 here which meant that update didn't complain from working from a table which it was updating. Then I followed this 创建两个嵌套的 SELECT 语句来确保这个新的 table 有它自己的别名。这做了我想要它做的。