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

时间:2018-04-05 12:24:43

标签: mysql records

我正在尝试更新数据库中的行(wordpress电子商务安装),以便其中具有相同ID的库存行为0的所有行都设置为“outofstock”,目前我收到错误' SQL错误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'; 

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

您应该使用REPLACE代替LEFT,因为它会给您1064错误

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

答案 1 :(得分:0)

上述评论很有帮助,但后来出现了其他问题。最后这里是解决方案

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创建两个嵌套的SELECT语句,这意味着更新并没有因为正在更新的表工作而抱怨。然后我跟着this确保这个新表有它自己的别名。这就是我想要的。