【发布时间】:2012-01-27 06:07:16
【问题描述】:
在 C++ 中,您可以这样做:
T.x = (T.y > 1 && (T.x - T.y < 0)) ? 0 : (T.x - T.y)
在[几乎]简单的英语中,是
if T.y > 1 and T.x-T.y < 0 then
set T.x to 0
else
set T.x to T.x-T.y
是否可以只使用 SQL 而不使用存储的过程或触发器来做同样的事情?
【问题讨论】:
在 C++ 中,您可以这样做:
T.x = (T.y > 1 && (T.x - T.y < 0)) ? 0 : (T.x - T.y)
在[几乎]简单的英语中,是
if T.y > 1 and T.x-T.y < 0 then
set T.x to 0
else
set T.x to T.x-T.y
是否可以只使用 SQL 而不使用存储的过程或触发器来做同样的事情?
【问题讨论】:
使用CASE 语句:
CASE WHEN T.y > 1 AND (T.x - T.y) < 0 THEN 0 ELSE (T.x - T.y) END
【讨论】:
是的,有可能,看看documentation,上面写着:
IF(expr1,expr2,expr3)
如果 expr1 为 TRUE(expr1 0 且 expr1 NULL),则 IF() 返回 expr2;否则返回 expr3。
这个未经测试的代码应该是你的情况:
SELECT IF(((T.y > 1) and (T.x-T.y < 0)), 0, (T.x-T.y))
【讨论】:
(expr1 <> 0 and expr1 <> NULL) 未知。
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
查看本手册了解详情control-flow-functions
【讨论】:
简化:
SELECT *,
CASE WHEN (y > 1 AND x < y) THEN 0 ELSE (x - y) END AS result
FROM T;
【讨论】: