Nếu bạn muốn nhận một hàng có hai cột khi có hai cột không rỗng và 1 nếu chỉ có một cột, bạn phải tạo động truy vấn của mình.
Nếu bạn muốn luôn có 1 cột trong đó mỗi hàng chứa một giá trị không rỗng, bạn có thể thực hiện điều đó với một liên kết.
SELECT a FROM tbl WHERE a IS NOT NULL AND id = ?
UNION
SELECT b FROM tbl WHERE b IS NOT NULL AND id = ?
UNION
SELECT c FROM tbl WHERE c IS NOT NULL AND id = ?
Nếu bạn muốn biết giá trị đến từ cột nào, bạn có thể làm như sau:
SELECT 'col a' AS ColName, a FROM tbl WHERE a IS NOT NULL AND id = ?
UNION
SELECT 'col b', b FROM tbl WHERE b IS NOT NULL AND id = ?
UNION
SELECT 'col c', c FROM tbl WHERE c IS NOT NULL AND id = ?
Lưu ý:union cũng loại bỏ các kết quả trùng lặp. Nếu bạn muốn giữ các bản sao, hãy sử dụng UNION ALL
.