跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教这个根据条件判断 UPDATE 的语句错在哪里?(UPDATE & WHEN),另请教一个进阶的语法。。。
未分類
22 2 月 2021

请教这个根据条件判断 UPDATE 的语句错在哪里?(UPDATE & WHEN),另请教一个进阶的语法。。。

请教这个根据条件判断 UPDATE 的语句错在哪里?(UPDATE & WHEN),另请教一个进阶的语法。。。

資深大佬 : qazwsxkevin 3

UPDATE `testppp`.`datatbl`` SET `phasea` = (CASE `phasea`  WHEN NULL THEN '5'     END) WHERE (`type`='2' AND `typeid`='6627'); 

第一个问题
如果 phasea 字段是 Null,就把它设置为 5,WHERE 是匹配条件
测试结果是:

Query OK, 0 rows affected (0.01 sec) Rows matched: 1  Changed: 0  Warnings: 0 

有匹配,没发生改动,确定 phasea 是 Null 的。。。

第二个进阶问题是:
在此基础上,如果有发生了 SET 值这个事情,就把 UpdateTime 设置为 now()
如果没有 UPDATE,什么都不变动。。。

大佬有話說 (6)

  • 資深大佬 : weizhen199

    为啥要这么写。

    ….set phasea =5 where phasea is null

    啊

  • 主 資深大佬 : qazwsxkevin

    @weizhen199 因为还会有其它字段的判断加入进来,在一条语句里面完成的呀,不只是这个字段的判断,我是试着写了一个测试先,反复看了几次语句的教学,也折腾不出来。。。。

  • 資深大佬 : eason1874

    可以用 IFNULL

    UPDATE `testppp`.`datatbl“ SET `phasea` = IFNULL(`phasea`, ‘5’) WHERE `type`=’2′ AND `typeid`=’6627′;

    最好还是可以按条件选出来直接修改

    UPDATE `testppp`.`datatbl“ SET `phasea` = ‘5’ WHERE `type`=’2′ AND `typeid`=’6627′ AND `phasea` IS NULL;

  • 資深大佬 : killergun

    第二个进阶问题: DateTime 可以设置 ON UPDATE CURRENT_TIMESTAMP 默认值行为

  • 主 資深大佬 : qazwsxkevin

    谢谢各位,如果是 IFNULL 或者 WHERE 判断对单个值判断,一行数据(多个值)的判断,也许就要组装 10 几条语句去完成,还是想学习一下 CASE WHEN 的方式,一行语句完成,因为组装好的语句,是通过队列去操作 MYSQL 的,所以一行语句比较符合预期。。。

  • 資深大佬 : smilenceX

    第一个问题:
    你可以用 case when phasea is null then 这种写法
    你那个写法的值不能是 null,具体可以查 mysql 官方文档,我不能贴链接,会被 v 站要求验证手机号。
    第二个问题可以考虑用 trigger 。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具