首页 > 解决方案 > 是否有一个 SQL 更新语句来处理我的场景?

问题描述

给定一个简单的 3 列表,其中包含一个 ID 列、一个 Name 列和一个 City 列,其中 City 和 Name 都可能包含 NULL:

我可能有一个或两个“城市/名称”列的内容(但至少有一个列)。是否可以编写一个更新语句来处理所有三种可能的情况?

谢谢你的帮助!

一些澄清:

  1. 标准 SQL - 没有特定于供应商的代码

  2. 我认为这是不言而喻的,但显然不是:3种可能的情况是:a)仅更新名称列,b)仅更新城市列,c)同时更新两者

  3. 对于视觉的人:

表:我的表

ID    Name       City
1     Bob        Houston

伪代码:

update MyTable
set Name = <new content if content known, otherwise do not update>
   ,City = <new content if content known, otherwise do not update>
where ID = 1

由于我是新来的,不知道有多少巨魔出没:下面的问题(这是真的吗)?为什么要更新字段?因为这就是人们使用 DBMS 所做的事情!

标签: sqlsql-update

解决方案


CASE 表达式会这样做:

update MyTable
  set Name = case when $1 is null then name else $1 end,
      city = case when $2 is null then city else $2 end
where ID = 1;

$1并且$2是您在代码中提供的参数。确切的语法取决于您使用的驱动程序/接口(在 JDBC 中,这将是?而不是$x


推荐阅读