首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql命令行中反转列值

问在mysql命令行中反转列值
EN

Stack Overflow用户
提问于 2010-03-29 04:37:20
回答 4查看 287关注 0票数 1

我有一个列为published的表posts,它可以是0(未发布)或1(已发布)。假设我想要将所有已发布的帖子转换为未发布的帖子,并将所有未发布的帖子转换为已发布的帖子。我知道跑步

代码语言:javascript
复制
UPDATE posts SET published = '1' WHERE published = '0';
UPDATE posts SET published = '0' WHERE published = '1';

最终会把我所有的帖子都变成已发布的帖子。我如何在mysql命令行中运行这些查询,使其真正“反转”这些值,而不是上面列出的错误?

谢谢

编辑:假设数据类型为字符串。我知道int/bools是一种更好的方法,但我使用的是字符串,不能更改模式。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-29 04:48:40

使用:

代码语言:javascript
复制
UPDATE posts
   SET published = CASE 
                     WHEN published IS NULL THEN NULL
                     WHEN published = '1' THEN '0'
                     ELSE '1' 
                   END
票数 2
EN

Stack Overflow用户

发布于 2010-03-29 04:39:46

如果这看起来真的很困难,那么您还没有充分考虑它。

代码语言:javascript
复制
UPDATE posts SET published = 1 - published;

应该这样做,或者其他一些解决方案(例如使用XOR或CASE)。

票数 2
EN

Stack Overflow用户

发布于 2010-03-29 04:46:11

对于字符串-可以在SET子句中使用任何表达式。

代码语言:javascript
复制
UPDATE posts SET published = IF(published = "1", "0", "1");

CASE版本,感谢我的老天爷:

代码语言:javascript
复制
UPDATE posts SET published = CASE published WHEN "1" THEN "0" ELSE "1" END;

在这两个版本中,如果published为NULL,则它将设置为"1“,因为与NULL的任何比较都是false。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2534453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档