2011-02-02 72 views
25

我爲MySQL(perl的)代碼:IF()語句替代SQLite中

UPDATE pages 
SET rkey = rkey + 2, 
    lkey = IF(lkey >= $key, lkey + 2, lkey) 
WHERE rkey >= $key 

我需要使用此代碼使用SQLite,但沒有支持IF()函數。我可以做什麼?

回答

52

對於通用的SQL,您可以使用CASE

情況下使用提供IF-THEN-ELSE類型的邏輯到SQL。其語法是:

SELECT CASE ("column_name") 
    WHEN "condition1" THEN "result1" 
    WHEN "condition2" THEN "result2" 
    ... 
    [ELSE "resultN"] 
    END 
FROM "table_name" 

http://www.sqlite.org/lang_expr.html從部分 「的情況下表達」

例如

UPDATE pages 
SET rkey = rkey + 2, 
    lkey = CASE WHEN lkey >= $key THEN lkey + 2 ELSE lkey END 
WHERE rkey >= $key 

約SQLite的& CASE另一個鏈接(用例與子查詢更新)http://sqlite.awardspace.info/syntax/sqlitepg09.htm

情況下,可以在通用SQL UPDATE使用,但我對SQLite的支持更新的任何信息與CASE

http://www.craigsmullins.com/ssu_0899.htm部分 「使用CASE表達式當修改數據」

+0

謝謝,但我需要它在UPDATE子句 – VeroLom 2011-02-02 12:13:08

6
UPDATE pages 
SET rkey = rkey + 2, 
    lkey = IF(lkey >= $key, lkey + 2, lkey) 
WHERE rkey >= $key 

???它到

UPDATE pages 
SET lkey = lkey + 2 
WHERE rkey >= $key AND lkey >= $key 

UPDATE pages 
SET rkey = rkey + 2, 
WHERE rkey >= $key 

不是更好嗎?