我有一个列为published的表posts,它可以是0(未发布)或1(已发布)。假设我想要将所有已发布的帖子转换为未发布的帖子,并将所有未发布的帖子转换为已发布的帖子。我知道跑步
UPDATE posts SET published = '1' WHERE published = '0';
UPDATE posts SET published = '0' WHERE published = '1';最终会把我所有的帖子都变成已发布的帖子。我如何在mysql命令行中运行这些查询,使其真正“反转”这些值,而不是上面列出的错误?
谢谢
编辑:假设数据类型为字符串。我知道int/bools是一种更好的方法,但我使用的是字符串,不能更改模式。
发布于 2010-03-29 04:48:40
使用:
UPDATE posts
SET published = CASE
WHEN published IS NULL THEN NULL
WHEN published = '1' THEN '0'
ELSE '1'
END发布于 2010-03-29 04:39:46
如果这看起来真的很困难,那么您还没有充分考虑它。
UPDATE posts SET published = 1 - published;应该这样做,或者其他一些解决方案(例如使用XOR或CASE)。
发布于 2010-03-29 04:46:11
对于字符串-可以在SET子句中使用任何表达式。
UPDATE posts SET published = IF(published = "1", "0", "1");CASE版本,感谢我的老天爷:
UPDATE posts SET published = CASE published WHEN "1" THEN "0" ELSE "1" END;在这两个版本中,如果published为NULL,则它将设置为"1“,因为与NULL的任何比较都是false。
https://stackoverflow.com/questions/2534453
复制相似问题