2013-06-14 33 views
25

Một chút trợ giúp tại đây. Tôi thực sự không hiểu cách sử dụng sự kết hợp này trong MySQLCách sử dụng Coalesce trong MySQL

Tôi đã đọc tất cả các trang trong kết quả trang 1 của how to use coalsece trong kết quả của google.

Tôi biết ý nghĩa của nó là nó trả về giá trị không null đầu tiên mà nó gặp phải và null khác.

Nhưng nó vẫn mơ hồ đối với tôi.

  1. Tôi thấy các truy vấn trả về nhiều giá trị như thế nào? Không phải nó chỉ là giá trị đầu tiên không null được trả về?
  2. Và làm cách nào để quyết định cột nào sẽ được căn cứ? coalesce(column1,column2)? nếu cột đầu tiên là null và cột khác không phải là null thì sao?
  3. Hoặc nếu tôi sai hoặc cú pháp của tôi sai, làm thế nào để tôi viết đúng?
  4. Ai đó có thể cung cấp một ví dụ rất hay và đơn giản về cách sử dụng?
  5. Và khi nào bạn muốn sử dụng.
+0

'liên hiệp() 'sẽ chỉ trả lại một giá trị duy nhất - giá trị không null đầu tiên, như bạn đề cập. Nếu bạn có một ví dụ cụ thể mà bất chấp điều này, vui lòng cập nhật câu hỏi của bạn. – fenway

Trả lời

30
  1. Tại sao tôi thấy các truy vấn trả về nhiều giá trị? isnt nó chỉ là giá trị đầu tiên không null được trả về?

    Có, nó chỉ là giá trị không NULL đầu tiên được trả về. Bạn phải nhầm lẫn về các truy vấn mà bạn đã thấy nơi bạn nghĩ rằng đó không phải là trường hợp: nếu bạn có thể cho chúng ta thấy một ví dụ, chúng tôi có thể giúp làm rõ sự hiểu lầm.

  2. Và làm cách nào để quyết định chọn cột nào? coalesce (cột1, cột2)? nếu cột đầu tiên là null và cột khác không phải là null thì sao?

    Để tham số của nó: trong ví dụ này, column1 trước column2.

  3. Hoặc nếu sai sai hoặc cú pháp của tôi sai, làm cách nào để viết đúng?

    Bạn không sai.

  4. Ai đó có thể cung cấp ví dụ rất hay và đơn giản về cách sử dụng?

    Taken từ the documentation:

    
    mysql> SELECT COALESCE(NULL,1); 
         -> 1 
    mysql> SELECT COALESCE(NULL,NULL,NULL); 
         -> NULL 
    
  5. Và khi đó là mong muốn sử dụng.

    Bạn nên sử dụng bất cứ khi nào một người muốn chọn giá trị không NULL đầu tiên từ danh sách.

+2

Hơn nữa để trả lời (5) - cũng khá hữu ích khi sử dụng LEFT JOINs. – fenway

+0

@fenway: Phụ thuộc vào logic mà người ta đang cố gắng triển khai. Hầu hết 'LEFT JOIN' mà tôi viết không sử dụng' COALESCE() '. – eggyal

+0

ồ phải, tôi quên, một câu hỏi khác. Khi nào tôi muốn chỉ truy vấn đầu tiên không null trong hàng ngàn hồ sơ? –

0

Đây là một ví dụ hoàn hảo của liên hiệp nếu sẽ thay đổi các lĩnh vực/cột rỗng với những gì bạn muốn họ được trong trường hợp từ null để 0 và 1. Sao chép này vào một trình soạn thảo mysql nó sẽ xem xét một tốt hơn

Chọn "Cột1 (Không muốn chạm)", kết hợp (cột2 (Bạn muốn đặt 0 nếu không), 0) làm cột2 (đặt tên giống như "cột2"), kết hợp (cột3) (Thay vì null được đặt thành 1), 1) dưới dạng cột 3 (đặt tên giống như "column3")
từ "MydataTable" ở đâu 'somedates' trong ('2015-04-10', '2015-04- 03 ',' 2015-03-27 ',' 2015-04-17 ') và id = 10 thứ tự của' somedates ';

15

Cá nhân tôi sử dụng kết hợp khi tôi muốn tìm cột đầu tiên không được để trống trong một hàng từ danh sách ưu tiên.

Ví dụ: tôi muốn nhận số điện thoại từ bảng khách hàng và họ có 3 cột cho số điện thoại có tên di động, nhà riêng và cơ quan, nhưng tôi chỉ muốn truy xuất số đầu tiên không trống.

Trong trường hợp này, tôi có mức độ ưu tiên của thiết bị di động, sau đó về nhà và sau đó hoạt động.

TABLE STRUCTURE 
-------------------------------------------- 
| id | customername | mobile | home | work | 
-------------------------------------------- 
| 1 | Joe   | 123 | 456 | 789 | 
-------------------------------------------- 
| 2 | Jane   |  | 654 | 987 | 
-------------------------------------------- 
| 3 | John   |  |  | 321 | 
-------------------------------------------- 

SELECT id, customername, COALESCE(mobile, home, work) AS phone FROM customers 

RESULT 
------------------------------ 
| id | customername | phone | 
------------------------------ 
| 1 | Joe   | 123 | 
------------------------------ 
| 2 | Jane   | 654 | 
------------------------------ 
| 3 | John   | 321 | 
------------------------------ 
1

COALESCE sẽ trả về cột hoặc giá trị không rỗng đầu tiên.

Ví dụ Cách sử dụng:

SELECT COALESCE(my_column, my_other_column, 'default') as username FROM my_table; 

Ví dụ kết quả:

my_column my_other_column  results 
null  null    'default' 
null  0     '0' 
null  'jimmy'    'jimmy' 
'bob'  'jimmy'    'bob' 
Các vấn đề liên quan