不是SQL专家,我在MySQL中使用NULL替换特定日期时间值时遇到了麻烦。由于从没有该日期的Excel电子表格中填充行(即空单元格),所讨论的可空last_login DATETIME
列可能具有值'1900-01-01 00:00:00.000'。每个数据库行由id INT
列唯一标识。我试过了:
UPDATE user_profiles
SET last_login = NULL
WHERE id IN
(SELECT id FROM user_profiles WHERE last_login = '1900-01-01 00:00:00.000');
但MySQL(我怀疑还有其他数据库)抗议WHERE子句适用于与正在更新的列相同的列。解决方案是什么?
答案 0 :(得分:2)
您不必在where语句中使用子查询:
UPDATE user_profiles
SET last_login = NULL
WHERE last_login = '1900-01-01 00:00:00.000';
答案 1 :(得分:0)
如果要使用具有相同字段的子查询,则需要标识表。通过使用表名或给它们别名。所以使用你的代码,这应该工作:
UPDATE user_profiles u
SET u.last_login = NULL
WHERE u.id IN
(SELECT x.id FROM user_profiles x WHERE x.last_login = '1900-01-01 00:00:00.000');
话虽如此,就像大多数人所说的那样,你不需要使用子查询:
UPDATE user_profiles
SET last_login = NULL
WHERE last_login = '1900-01-01 00:00:00.000';