我有一个表posts
,其列为published
,其为0(未发布)或1(已发布)。
假设我想将所有已发布的帖子发布到未发布的帖子中,将所有未发布的帖子发布到已发布的帖子中。
我知道正在运行
UPDATE posts SET published = '1' WHERE published = '0';
UPDATE posts SET published = '0' WHERE published = '1';
最终会将我的所有帖子都转到已发布的帖子中。 我如何在mysql命令行中运行这些查询,以便它真正“反转”值,而不是上面提到的错误?
由于
编辑:假设数据类型是字符串。我知道ints / bools是一个更好的方法,但我正在使用字符串,并且不能改变模式。
答案 0 :(得分:2)
如果这看起来真的很难,你就没有考虑过它了。
UPDATE posts SET published = 1 - published;
应该这样做,或者其他一些解决方案(例如使用XOR或CASE)。
答案 1 :(得分:2)
对于字符串 - 您可以使用SET
子句中的任何表达式。
UPDATE posts SET published = IF(published = "1", "0", "1");
CASE
版,感谢OMG小马:
UPDATE posts SET published = CASE published WHEN "1" THEN "0" ELSE "1" END;
在两个版本中,如果发布了IS NULL,它将设置为“1”,因为与NULL的任何比较都是false。
答案 2 :(得分:2)
使用:
UPDATE posts
SET published = CASE
WHEN published IS NULL THEN NULL
WHEN published = '1' THEN '0'
ELSE '1'
END
答案 3 :(得分:0)
你们怎么看待这个:
UPDATE posts SET published = 'A1' WHERE published = 'A';
UPDATE posts SET published = 'B' WHERE published = 'A';
UPDATE posts SET published = 'A' WHERE published = 'A1';
编辑:这不是远程正确的