MySQL中UPDATE语句影响0行

MySQL中UPDATE语句影响0行,mysql,sql,Mysql,Sql,您好,我有一个update语句,其中我试图将meta_键数量从大于3的任何值减少到meta_值的3,并且每当我执行此语句时,都会受到0行的影响 UPDATE usermeta INNER JOIN cov on cov.user_id = usermeta.user_id SET usermeta.meta_value = '3' WHERE usermeta.meta_key = 'quantity' AND usermeta.meta_value > '3' AND co

您好,我有一个update语句,其中我试图将meta_键数量从大于3的任何值减少到meta_值的3,并且每当我执行此语句时,都会受到0行的影响

UPDATE usermeta 
INNER JOIN cov on cov.user_id = usermeta.user_id 
SET usermeta.meta_value = '3'
WHERE usermeta.meta_key = 'quantity' 
  AND usermeta.meta_value > '3'
  AND cov.end_date = '2017-05-18'
-- this is the query to see the rows I want changed   
SELECT cov.*, usermeta.meta_value
FROM cov
 INNER JOIN usermeta
    ON     cove.user_id = usermeta.user_id
       AND meta_key = 'quantity'
WHERE cov.end_date = '2017-05-18' and usermeta.meta_value > 3
ORDER BY end_date

有人能看出我做错了什么吗?谢谢

3和3之间有区别。因此,我首先要说:

UPDATE usermeta um INNER JOIN
       cov 
       ON cov.user_id = um.user_id 
    SET um.meta_value = '3'
WHERE um.meta_key = 'quantity' AND
      um.meta_value + 0 > 3 AND
      cov.end_date = '2017-05-18';

我认为代码本身没有任何问题。您是否确保usermeta表中usermeta.meta_值字段中的值实际大于3?第二件事是,你的字段meta_值和INT数据类型是什么?如果是,则需要在此处输入“3”

UPDATE usermeta um INNER JOIN cov 
ON cov.user_id = um.user_id 
SET um.meta_value = 3
WHERE um.meta_key = 'quantity' AND
um.meta_value > 3 AND
cov.end_date = '2017-05-18';

让我知道这是否适合你

我的更新问题不在于代码。这是因为userid列中有重复的id。在WHERE子句中锁定无效用户并将其添加到NOT IN解决了我的问题。

是否检查表中的数据是否符合此更新的标准?是的!我进行了编辑并添加了一个用于查看要更改的行的查询。如果我在“查看我的行的位置”中使用了3而不是“3”,那么我也应该在集合中不使用引号,对吗?因为那也会引起变化?@choloboy。在比较中,它会产生差异,因为值会转换为数字。在集合中,它没有任何区别,因为整数将被转换为字符串。不幸的是,它没有,我得到了以下错误:查找错误-MySQL数据库错误:截断了不正确的双精度值:因此,是的,您可能需要将其改回“3”,您是否检查了该字段的数据类型?是varchar还是INT?你有没有检查过表中有没有大于3的值?比较发生在不同的类型上,当MySQL比较不同的数据类型时,在比较之前,它们在内部被强制转换为双倍。因此,您可以尝试使用单引号或转换来解决问题。longtext是数据类型