2012-12-02 46 views
21

Tôi muốn cập nhật nhiều cột trong bảng của tôi bằng cách sử dụng tuyên bố trường hợp, nhưng tôi không thể tìm thấy cách thực hiện việc này (điều này thậm chí có thể). Tôi đã đưa ra truy vấn tham chiếu không hợp lệ sau:MySQL CASE để cập nhật nhiều cột

UPDATE tablename SET 
    CASE name 
     WHEN 'name1' THEN col1=5,col2='' 
     WHEN 'name2' THEN col1=3,col2='whatever' 
     ELSE col1=0,col2='' 
    END; 

Có cách nào để đạt được kết quả mong đợi với SQL hợp lệ không?

+0

Có thể trùng lặp: http://stackoverflow.com/questions/8358642/case-statement-in-sql-how-to-return-multiple-variables – ean5533

+1

Không thực sự, đây là tuyên bố cập nhật, không phải là câu chọn được chọn. – Villermen

+0

Bản sao của http://stackoverflow.com/q/3432/1553851 – shmosel

Trả lời

29
UPDATE tablename 
SET col1 = CASE WHEN name = 'name1' THEN 5 
       WHEN name = 'name2' THEN 3 
       ELSE 0 
      END 
, col2 = CASE WHEN name = 'name1' THEN '' 
       WHEN name = 'name2' THEN 'whatever' 
       ELSE '' 
      END 
; 
+0

Cảm ơn vì điều này! Tôi sẽ sử dụng định dạng của ean5533 vì nó bao gồm tên CASE, nhưng định dạng này được định dạng tốt hơn nên tôi đánh dấu nó là anser. – Villermen

+0

Thú vị ... Tôi không biết đó là cú pháp hợp lệ. Học điều mới mỗi ngày. – bobwienholt

+0

Cảm ơn bạn rất nhiều @bobwienholt cho truy vấn TRƯỜNG HỢP CẬP NHẬT này – Pank

6

Tôi không biết cách nào để làm những gì bạn yêu cầu. Tương đương cập nhật SQL hợp lệ sẽ là:

UPDATE tablename SET 
    col1 = CASE name WHEN 'name1' THEN 5 WHEN 'name2' THEN 3 ELSE 0 END, 
    col2 = CASE name WHEN 'name1' THEN '' WHEN 'name2' THEN 'whatever' ELSE '' END; 

Tất nhiên điều này là không đẹp và đòi hỏi lặp đi lặp lại các trường hợp tương tự (ví dụ 'name1') nhiều lần, nhưng tôi chỉ không nghĩ rằng nó có thể bất kỳ cách nào khác.

+0

Điều này thực hiện thủ thuật, và việc lặp lại sẽ không khó cho PHP để xử lý =) Cảm ơn! – Villermen

0

Nếu name có một chỉ số duy nhất và giá trị của bạn được biết là tồn tại trong bảng, bạn có thể sử dụng thủ thuật này:

INSERT INTO tablename (name, col1, col2) 
VALUES ('name1', 5, '') 
    , ('name2', 3, 'whatever') 
ON DUPLICATE KEY UPDATE 
     col1 = VALUES(col1) 
    , col2 = VALUES(col2); 

Nếu có bất kỳ NOT NULL cột bổ sung mà không có một giá trị mặc định, bạn sẽ phải để thêm các giá trị giả cho những giá trị đó. Chỉ cần để chúng ra khỏi số ON DUPLICATE KEY UPDATE và chúng sẽ bị bỏ qua.

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