SQL:三元操作

时间:2012-01-27 06:07:17

标签: mysql 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执行相同的操作,而不使用存储过程或触发器?

4 个答案:

答案 0 :(得分:11)

使用CASE声明:

CASE WHEN T.y > 1 AND (T.x - T.y) < 0 THEN 0 ELSE (T.x - T.y) END

答案 1 :(得分:5)

是的,可以看一下documentation,它说:

  

IF(expr1,expr2,expr3)

     

如果expr1为TRUE(expr1&lt;&gt; 0且expr1&lt;&gt; NULL),则IF()返回   表达式2;否则它返回expr3。

这个未经测试的代码应该是你的情况:

SELECT IF(((T.y > 1) and (T.x-T.y < 0)), 0, (T.x-T.y))

答案 2 :(得分:0)

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

查看本手册了解详情control-flow-functions

答案 3 :(得分:0)

简化为:

SELECT *, 
      CASE WHEN (y > 1 AND x < y) THEN 0 ELSE (x - y) END AS result
 FROM T;