2011-02-11 40 views
40

Tại sao truy vấn này không hoạt động? :(Tôi cố gắng để thay thế lồng nhau NẾU tuyên bố "... SET lkey = IF (lkey> = 11, lkey - 5, IF (lkey> 5, lkey + 2, lkey))"Tuyên bố CASE trong truy vấn SQLite

UPDATE pages 
SET lkey = CASE lkey WHEN lkey >= 11 THEN 
     lkey - 5 
    ELSE 
     CASE lkey WHEN lkey > 5 THEN 
      lkey + 2 
     ELSE 
      lkey 
     END 
    END, 
    rkey = CASE lkey WHEN lkey >= 11 THEN 
     rkey - 5 
    ELSE 
     CASE rkey WHEN rkey < 11 THEN 
      rkey + 2 
     ELSE 
      rkey 
     END 
    END 
WHERE rkey > 5 AND 
    lkey < 12; 

Trả lời

75

Cú pháp là sai định tại khoản này (và những cái tương tự)

CASE lkey WHEN lkey > 5 THEN 
     lkey + 2 
    ELSE 
     lkey 
    END 

Đó là một trong hai

CASE WHEN [condition] THEN [expression] ELSE [expression] END 

hoặc

CASE [expression] WHEN [value] THEN [expression] ELSE [expression] END 
.210

Vì vậy, trong trường hợp của bạn nó sẽ đọc:

CASE WHEN lkey > 5 THEN 
     lkey + 2 
    ELSE 
     lkey 
    END 

Kiểm tra các tài liệu (Biểu thức CASE):

http://www.sqlite.org/lang_expr.html

28

Ngoài ra, bạn không cần phải sử dụng các trường hợp lồng nhau. Bạn có thể sử dụng một số dòng WHEN-THEN và dòng ELSE cũng là tùy chọn eventhough Tôi khuyên bạn nên

CASE 
    WHEN [condition.1] THEN [expression.1] 
    WHEN [condition.2] THEN [expression.2] 
    ... 
    WHEN [condition.n] THEN [expression.n] 
    ELSE [expression] 
END 
Các vấn đề liên quan