sql - 是否有一个 SQL 更新语句来处理我的场景?
问题描述
给定一个简单的 3 列表,其中包含一个 ID 列、一个 Name 列和一个 City 列,其中 City 和 Name 都可能包含 NULL:
我可能有一个或两个“城市/名称”列的内容(但至少有一个列)。是否可以编写一个更新语句来处理所有三种可能的情况?
谢谢你的帮助!
一些澄清:
标准 SQL - 没有特定于供应商的代码
我认为这是不言而喻的,但显然不是:3种可能的情况是:a)仅更新名称列,b)仅更新城市列,c)同时更新两者
对于视觉的人:
表:我的表
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 所做的事情!
解决方案
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
)
推荐阅读
- node.js - express 如何在没有 next() 的异步代码中捕获抛出的错误?
- delphi - 显示在包含 tchart 的面板顶部的 tPanel 是透明的(Delphi)
- r - 没有标签或轴标题 - WaveleComp 包的 wc.image 问题(?)
- c++ - 我的 Visual Studio 找不到文件,因此无法进行基本操作。它出什么问题了?
- reactjs - Storybook 无法导入 Swiper 模块
- php - 如果浏览器必须滚动到空字段,则不会显示空的必填字段的 HTML 表单工具提示
- mysql - 无法让 CASE 和 GROUP BY 在同一行中显示所有值
- flutter - 颤振中的 sqflite 问题
- rust - 从可变引用中引用内部值的可变规则是什么?
- bash - \# 不在 bash 中提供命令号