首页 > 解决方案 > SQL 更新语句不适用于 281 条记录

问题描述

我在 Jetbrains 的 DataGrip 中运行这些查询

因此,第一个查询用于重置 snapchat 的进程,其中 snap_username = '0'。我运行它,它说有 281 条记录影响,很好用吗?不。

UPDATE cache_items SET snap_username = NULL AND snap_processed_at = NULL AND snap_approved_at = NULL AND snap_result = 'waiting' WHERE LENGTH(snap_username) > 0
AND snap_username = '0';

在多次运行第一个查询之后,这个仍然返回原始的 281 条记录,每次它说 281 行受到影响。

SELECT item, description, snap_username FROM cache_items WHERE LENGTH(snap_username) > 0
AND snap_username = '0';

奇怪的是,我不确定它最初是如何变成 0 的——我猜这是我的播种机之一搞砸了。

snap_username 是 varchar 255 数据类型。

标签: mysqlsql

解决方案


我想你想要:

UPDATE cache_items
    SET snap_username = NULL,
        snap_processed_at = null,
        snap_approved_at = null,
        snap_result = 'waiting'
    WHERE LENGTH(snap_username) > 0 AND snap_username = '0';

请注意,ANDs 将替换为,s。

您的代码被解析为:

set snap_username = (NULL AND snap_processed_at = null AND snap_approved_at = null AND snap_result = 'waiting')

推荐阅读