2013-02-16 27 views
5

Tôi muốn tăng một số thứ tự cho các phân nhóm trong một bảng, nhưng nếu nhóm không tồn tại thì chuỗi nên bắt đầu với 1:Sqlite: Thiết lập giá trị mặc định cho một phụ truy vấn tối đa nếu kết quả là null

Ví dụ, trong phần sau, chúng tôi muốn trình tự được đặt thành 1 nếu không có bản ghi nào trong bảng với class=5; nếu có tồn tại các hồ sơ như vậy, sau đó chuỗi nên chuỗi giá trị max (trong nhóm class=5) + 1:

update order set class=5, sequence=(select max(sequence) from order 
where class=5)+1 where order_id=104; 

Vấn đề là ở trên không làm việc đối với trường hợp ban đầu.

Trả lời

6

Trong những tình huống này, chức năng COALESCE() đi rất tiện dụng:

UPDATE order 
SET class = 5, 
    sequence = coalesce(
     (SELECT max(sequence) 
     FROM order 
     WHERE class=5), 
     0 
    ) + 1 
WHERE order_id = 104 

Một điều tốt về COALESCE rằng nó được hỗ trợ bởi hầu hết các khác Các công cụ SQL - MySQL, Postgres, v.v ...

+0

hm, thats đáng giá, upvote ecause của "làm việc với hầu hết" ngoài ra ... của tôi awfull tự luôn googles "NVL SQL-Engine Name thay thế" ;-) – Najzero

Các vấn đề liên quan