在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