MySQL: Đánh máy NULL thành 0


81

Giả sử bảng sau (ví dụ: kết quả của một số câu lệnh nối bên trong):

id | column_1 | column_2
------------------------
 1 |  1       | 
 2 |  2       | 2
 3 |          | 3

Ví dụ bạn có thể nhận được từ câu lệnh sau:

select a.id, t1.column_1, t2.column_2
from a
left join t1 on a.id = t1.id
left join t2 on a.id = t2.id

Bây giờ, nếu tôi muốn tổng hợp t1.column_1 và t2.column_2 như sau

select 
    a.id, 
    t1.column_1, 
    t2.column_2,
    (t1.column_1 + t2.column_2) as cumulated
from a
left join t1 on a.id = t1.id
left join t2 on a.id = t2.id

Reslut sẽ trông như sau:

id | column_1 | column_2 | cumulated
------------------------------------
 1 |  1       | NULL     | NULL
 2 |  2       | 2        | 4
 3 |  NULL    | 3        | NULL

Câu hỏi của tôi về cơ bản là: có cách nào để gõ NULL thành 0 để thực hiện một số phép toán không?

Tôi đã thử CONVERT(t1.column_1, SIGNED)CAST(t1.column_1 as SIGNED), nhưng NULLvẫn a NULL.

Câu trả lời:


152

Sử dụng IFNULL(column, 0)để chuyển đổi giá trị cột thành không. Ngoài ra, hàm COALESCE sẽ làm điều tương tự, ngoại trừ (1) COALESCElà không tuân thủ ANSI IFNULL, và (2) COALESCEnhận một số cột / giá trị tùy ý và sẽ trả về giá trị không rỗng đầu tiên được chuyển cho nó.


và liên kết có thể có nhiều hơn một giá trị?
ante.sabo

10
Có ... vì vậy COALESCE (column1, column2, 0) sẽ trả về giá trị khác rỗng đầu tiên của các giá trị này. Hãy nhớ rằng điều này hoạt động theo chiều ngang, không phải theo chiều dọc. Các cột phải thuộc cùng một hàng trong bảng.
David Andres

@rexem: Cảm ơn, bạn nói rất tuyệt. Nhiều đánh giá cao!
David Andres

@David Andres Một triệu người cảm ơn. Giá mà tôi có thể ủng hộ lần thứ hai.
câu chuyện
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.