如何用case/when语句实现不同条件下更新同一张数据表的不同字段?

现有数据表t_data(id,type,field1,field2)。现在希望写一条update语句,实现当type='A'时更新field1的值为'X',当type='... 现有数据表t_data(id, type ,field1, field2)。
现在希望写一条update语句,实现当type='A'时更新field1的值为'X',当type='B'时更新field2的值为'X'。

请问能否用case/when实现该功能?谢谢。
展开
 我来答
王律师案件普法

2018-03-30 · TA获得超过35.9万个赞
知道大有可为答主
回答量:374
采纳率:89%
帮助的人:35万
展开全部

可使用case when来实现这个条件,需要嵌套子查询语句,sql语句代码示例如下: 

1、首先你这里的不同字段应该有个优先级别,类似先判断哪个字段然后判断哪个字段。如果仅仅以字段和字段值来作为条件 用DECODE 套 DECODE 直到符合你的逻辑需求。

2、如果牵扯到两个字段值的比较。例如:如果字段A等于字段B则显示XXX 这种判断请使用NULLIF配合DECODE也可以用WHEN CASE   (9以前可能不支持NULLIF)。

3、如果是模糊比较例如:字段A大于字段B,需要更多的函数来判断常用的有SIGN通过加减法之后的结果来判断两个字段大小。

举例如下:

1、数据表为DemoTable,字段有id, condition1,condition2,condition3,condition4,condition5 

2、要求是查询DemoTable中,condition1,condition2,condition3,condition4,condition5五个字段中符合任意两个或两个以上的条件的内容。

zhiyinmmm
2015-11-12 · TA获得超过2602个赞
知道小有建树答主
回答量:646
采纳率:75%
帮助的人:88.3万
展开全部
需要复制一段代码,带入后即可更新一张数据表的不同字段,具体如下:
复制代码 代码如下:
UPDATE mytable
SET myfield = CASE id
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)
这里使用了case when 这个小技巧来实现批量更新。
举个例子:
复制代码 代码如下:
UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。
即是将条件语句写在了一起。
这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
温馨又舒服灬mmf
2016-04-05 · TA获得超过1130个赞
知道小有建树答主
回答量:757
采纳率:100%
帮助的人:97.6万
展开全部
现有数据表t_data(id, type ,field1, field2)。
现在希望写一条update语句,实现当type='A'时更新field1的值为'X',当type='B'时更新field2的值为'X'。
update t_data set field1=(case when type='A' then 'X' else filed1 end)
,filed2=(case when type='B' then 'X' else filed2 end)
where xxx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星辉萍萍
2016-04-20
知道答主
回答量:7
采纳率:0%
帮助的人:7676
展开全部
现有数据表t_data(id, type ,field1, field2)。
现在希望写一条update语句,实现当type='A'时更新field1的值为'X',当type='B'时更新field2的值为'X'。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
推荐于2018-02-26 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5145万
展开全部
update t_data set field1=(case when type='A' then 'X' else filed1 end)
,filed2=(case when type='B' then 'X' else filed2 end)
where xxx
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式