SQL đặt giá trị của một cột bằng giá trị của cột khác trong cùng một bảng


94

Tôi có một bảng với hai cột DATETIME.

Một trong số chúng không bao giờ là NULL, nhưng một trong số chúng đôi khi là NULL.

Tôi cần viết một truy vấn sẽ đặt tất cả các hàng NULL cho cột B bằng các giá trị trong cột A.

Tôi đã thử ví dụ này nhưng SQL trong câu trả lời đã chọn không thực thi bởi vì MySQL Workbench dường như không thích FROM trong UPDATE.

Câu trả lời:


156

Có vẻ như bạn đang làm việc chỉ trong một bảng, như sau:

update your_table
set B = A
where B is null

21
UPDATE YourTable
SET ColumnB=ColumnA
WHERE
ColumnB IS NULL 
AND ColumnA IS NOT NULL

20

Tôi sẽ làm theo cách này:

UPDATE YourTable SET B = COALESCE(B, A);

COALESCE là một hàm trả về đối số không rỗng đầu tiên của nó.

Trong ví dụ này, nếu B trên một hàng nhất định không phải là giá trị rỗng, thì bản cập nhật là không chọn.

Nếu B rỗng, COALESCE bỏ qua nó và sử dụng A thay thế.


5

Tôi không nghĩ rằng ví dụ khác là những gì bạn đang tìm kiếm. Nếu bạn chỉ cập nhật một cột từ một cột khác trong cùng một bảng, bạn sẽ có thể sử dụng một cái gì đó như thế này.

update some_table set null_column = not_null_column where null_column is null

1

Đây là mã mẫu có thể giúp bạn đối chiếu từ Cột A sang Cột B:

UPDATE YourTable
SET ColumnB = ColumnA
WHERE
ColumnB IS NULL
AND ColumnA IS NOT NULL;

Lưu ý của người điều hành - Vui lòng không khôi phục các bản cập nhật hợp lệ cho bài đăng của bạn.
Bhargav Rao
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.