【问题标题】:Insert data into a column only if it has NULL value, else update it [duplicate]只有当它具有NULL值时才将数据插入列中,否则更新它[重复]
【发布时间】:2021-03-18 17:28:47
【问题描述】:

只有当从 HTML 页面发送的数据不是 NULL 或 '' 时,我才想将数据更新到表中的列中。否则,不得触摸该列。示例:-

table_1

id      name         age        rent        
==========================================
1       Name 1         25         1000         
2       Name 2         28         NULL          
3       Name 3         35         1500          
4       Name 4         44         3200          
5       name 5          42        NULL          

将从 HTML 页面发送的数据存储在变量 today_rent 中,并将该变量发送到 MYSQL。

MySQL 查询

IF(today_rent !=null OR today_rent != '') THEN
UPDATE table_1 SET rent=today_rent WHERE id=2
END IF;

还有其他方法吗?

【问题讨论】:

  • 您不插入列,INSERT 会创建新行。
  • 您在 INSERT 查询中缺少表名。
  • 如果该代码(修正了错字)符合您的要求,我认为没有比这更好的方法了。您不能将这些 INSERTUPDATE 查询组合成一个查询。
  • NULL=NULLNULL,这是不正确的。你的意思可能是IF (rent IS NULL)
  • 提供所需的最终表数据状态。

标签: mysql sql


【解决方案1】:

添加索引

CREATE UNIQUE INDEX idx ON test (id, (CASE WHEN rent IS NULL THEN 0 ELSE id END));

然后使用

INSERT INTO test (id, rent) 
VALUES (@id,@new_rent) 
ON DUPLICATE KEY UPDATE rent = VALUES(rent);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c48a44a6268e2e1710162b337efa592b

PS。该查询未设置 nameage 列 - 但问题中未描述它们的设置必要性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 2021-01-21
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多