2011-12-01 38 views
9

Tôi có một câu lệnh UPDATE MySQL sử dụng một điều khoản TRƯỜNG HỢPMySQL TRƯỜNG HỢP ... WHERE ... THEN báo cáo

UPDATE partsList SET quantity = 
CASE 
    WHEN partFK = 1 THEN 4 
    WHEN partFK = 2 THEN 8 
END 
WHERE buildFK = 1; 

Các công trình tuyên bố trên. Tuy nhiên, khi tôi loại bỏ một trong các câu lệnh WHEN, nó phá vỡ và lỗi cho biết mệnh đề CASE không trả về bất cứ điều gì. Có phải mệnh đề CASE phải có nhiều WHEN để hoạt động không.

Tôi không biết trước bao nhiêu lần cập nhật tôi cần, vì vậy tôi đang cố tạo một bản cập nhật đơn lẻ có thể xử lý một hoặc nhiều cập nhật.

Cảm ơn bạn đã cung cấp bất kỳ thông tin chi tiết nào.

Trả lời

26

Không phải là số CASE phải có nhiều hơn một, WHEN...THEN, là nó phải xử lý tất cả ngày bạn cung cấp.

Nếu bạn loại bỏ một trong các mệnh đề, bạn để lại một lỗ. ví dụ.

UPDATE partsList SET quantity = 
CASE 
    WHEN partFK = 1 THEN 4 
END 
WHERE buildFK = 1; 

Với tuyên bố cập nhật này, nếu parkFK là 2, thì bản cập nhật không thành công vì CASE không thể xử lý đầu vào.

Bạn có thể giới hạn dữ liệu nguồn của mình bằng cách thêm một dòng khác vào mệnh đề where (ví dụ: AND partFK in (1,2)) hoặc bạn có thể thêm ELSE vào biểu thức trường hợp.

UPDATE partsList SET quantity = 
CASE 
    WHEN partFK = 1 THEN 4 
    WHEN partFK = 2 THEN 8 
    ELSE 12 
END 
WHERE buildFK = 1; 

Tuy nhiên, dựa trên câu lệnh SQL bạn đã hiển thị, có thể có cách tốt hơn. Có lẽ, partFK là một khóa ngoại cho một số bảng khác. Bạn có thể kéo giá trị cho quantity từ đó không?

+0

Ahh, tôi hiểu rồi. Tôi đã đọc rằng cơ sở dữ liệu đánh giá CASE trên mỗi hàng, do đó bây giờ có ý nghĩa. Bảng là một liên kết giữa các bản dựng và các phần, bảng này là nơi lưu trữ số lượng. Tôi có thể sử dụng giá trị hiện tại trong ELSE không? I E. Số lượng ELSE – CDspace

+0

Có, 'số lượng ELSE' sẽ hoạt động. – recf

+1

Tuyệt vời, cảm ơn vì đã dọn dẹp cho tôi. Và đối với hồ sơ, 'số lượng ELSE' đã hoạt động. – CDspace

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