在C++中,你可以这样做:SQL:三元操作
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++中,你可以这样做:SQL:三元操作
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
+1,那么'IF'语句就可读。 – lqez 2012-01-27 06:15:43
分号语句终止符在这里有效吗? – onedaywhen 2012-01-27 07:02:23
@onedaywhen你是对的。我删除了它,因为它是一个片段而不是完整的声明。 – 2012-01-27 07:03:01
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
检查本手册的细节control-flow-functions
是其可能的话,看看documentation,它说:
IF(表达式1,表达式2,表达式3)
如果expr1为真(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和expr1 <> NULL)'是UNKNOWN。 – onedaywhen 2012-01-27 07:00:59
这意味着IF(0,是,否)或IF(NULL,是,否)这样的语句可能会返回否 – CloudyMarble 2012-01-27 07:46:46
简化:
SELECT *,
CASE WHEN (y > 1 AND x < y) THEN 0 ELSE (x - y) END AS result
FROM T;
看到:HTTP://dev.mysql .com/doc/refman/5.0/en/case-statement.html – diEcho 2012-01-27 06:11:04
请参阅http:// sta ckoverflow.com/q/1647961/584420 – 2012-01-27 06:36:35