2011-02-02 10 views
25

में मैं MySQL (पर्ल) के लिए कोड है:IF() बयान विकल्प SQLite

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

मैं SQLite के साथ इस कोड का उपयोग करने की जरूरत है, लेकिन अगर() फ़ंक्शन का कोई समर्थन नहीं है। मैं क्या कर सकता हूँ?

उत्तर

52

सामान्य एसक्यूएल के लिए आप CASE उपयोग कर सकते हैं:

मामला एसक्यूएल करने के लिए तर्क की अगर-तो-और कुछ प्रकार प्रदान करने के लिए प्रयोग किया जाता है। इसके वाक्य रचना है:

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 & मामला एक और लिंक http://sqlite.awardspace.info/syntax/sqlitepg09.htm

मामला सामान्य एसक्यूएल में अद्यतन में इस्तेमाल किया जा सकता है, लेकिन मैं मामले

साथ अद्यतन के SQLite समर्थन के बारे में कोई जानकारी है (सबसिलेक्ट साथ अद्यतन के उदाहरण के साथ)

http://www.craigsmullins.com/ssu_0899.htm अनुभाग "मामला भाव का उपयोग करते हुए जब डेटा को संशोधित"

+0

धन्यवाद, लेकिन मैं यह अद्यतन खंड – VeroLom

+1

VeroLom में की जरूरत है, बस अद्यतन में यह प्रयास करें। केस मूल अभिव्यक्ति स्कैनिंग का हिस्सा है, चयन का हिस्सा नहीं है। – osgx

+0

मैं SQLite परिणाम के बिना लंबे समय के बारे में सोच रहा है जब मैं कोड "... lkey = मामले का उपयोग करते हैं lkey => $ कुंजी तो lkey + 2 वरना lkey अंत ... – VeroLom

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 

क्या यह बेहतर नहीं है?