作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 UPDATE
语句:
update MESSAGES set status=
(select (CASE
WHEN from_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'S'
WHEN status='R'
THEN 'D'
END)
WHEN to_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'R'
WHEN status='S'
THEN 'D'
END)
END)
as status_value)
where primary_key='236499681204'
and status_value not null ;
此查询的问题是,在最后一行,status_value
无法识别。如果我删除最后一个比较,and status_value not null
,它将起作用。我不希望上面的版本可以工作,但是有人能告诉我一个可以达到同样效果的替代方案吗?
有没有一种方法可以在 UPDATE
查询中使用 AS
关键字来定义变量 status_value
?
编辑
实际的要求不仅仅是我检查 status_value
是否为 null
,而且我不执行任何更新,如果它是 空
最佳答案
尝试添加 ELSE STATUS
并删除 and status_value not null
:
update MESSAGES set status=
(select (CASE
WHEN from_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'S'
WHEN status='R'
THEN 'D'
END)
WHEN to_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'R'
WHEN status='S'
THEN 'D'
END)
ELSE STATUS
END)
as status_value)
where primary_key='236499681204';
你也可以尝试使用view
create view MyView as
select (CASE
WHEN from_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'S'
WHEN status='R'
THEN 'D'
END)
WHEN to_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'R'
WHEN status='S'
THEN 'D'
END)
END)
as status_value;
update MESSAGES set status= mv.status_value
from MyView mv
where primary_key='236499681204'
and mv.status_value is null
或者你可以使用case in condition
update MESSAGES set status=
(select (CASE
WHEN from_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'S'
WHEN status='R'
THEN 'D'
END)
WHEN to_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'R'
WHEN status='S'
THEN 'D'
END)
END)
as status_value)
where primary_key='236499681204'
and CASE
WHEN from_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'S'
WHEN status='R'
THEN 'D'
END)
WHEN to_id='111111111'
THEN (CASE
WHEN status='A'
THEN 'R'
WHEN status='S'
THEN 'D'
END)
END is not null;
关于mysql - SQL - 在 UPDATE 语句中提供 AS 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12716743/
我是一名优秀的程序员,十分优秀!