2012-04-26 58 views
20

Có một tùy chọn để làm cho chức năng Group_Concat của MySQL bao gồm null không?MySQL GROUP_CONCAT với Nulls

xem xét ví dụ sau đây từ bảng nguồn của tôi:

userId, questionId, selectionId 
7, 3, NULL 
7, 4, 1 
7, 5, 2 

Khi tôi truy vấn trên bảng lựa chọn với GROUP_CONCAT, tôi nhận được như sau:

7, 4=1,5=2 

Tôi muốn nhận được như sau:

7, 3=NULL,4=1,5=2 

Để tham khảo, truy vấn của tôi trông giống như sau:

Select userId, GROUP_CONCAT(CONCAT(questionId, '=', selectionId)) 
From selection 
Group by userId; 

Tôi cũng đã cố gắng thêm một IFNULL như thế này:

Select userId, GROUP_CONCAT(IFNULL(CONCAT(questionId, '=', selectionId), 'NULL')) 
From selection 
Group by userId; 

nhưng điều đó được sản xuất như sau:

7, NULL,4=1,5=2 

Lưu ý - Chỉ có một độ phức tạp khác mà tôi quên bao gồm. Lựa chọnId là khóa ngoài cho một bảng khác. Tôi sử dụng một tham gia bên ngoài bên trái vào bảng selection_text. Truy vấn thực sự của tôi bao gồm các trường từ bảng đó (các trường này giải quyết thành NULL vì selectionId là null).

+0

Được sản xuất những gì cần, hãy thử IFNULL trên selectionId, không phải trên CONCAT. – piotrm

+0

Điều đó đã hiệu quả. Cảm ơn. – David

+0

Nhưng nói chung - tránh sử dụng Concat nhóm! – IcedDante

Trả lời

22

Bạn nên chỉ IFNULL cột có thể được NULL;

SELECT userId, GROUP_CONCAT(CONCAT(questionId, '=', 
       IFNULL(selectionId, 'NULL'))) 
FROM selection 
GROUP BY userId; 

Demo here.

+0

Chỉ có vấn đề này. Câu trả lời tuyệt vời. Bây giờ tôi đã học được điều gì đó mới mẻ của tôi cho ngày hôm nay :) – b3tac0d3

2

Bạn nên sử dụng IFNULL hoặc COALESCE trên selectionId giá trị trực tiếp:

SELECT 
    userId, 
    GROUP_CONCAT(CONCAT(questionId, '=', COALESCE(selectionId, 'NULL'))) 
FROM selection 
GROUP BY userId; 
Các vấn đề liên quan