Jeśli chcesz uzyskać wiersz z dwiema kolumnami, gdy istnieją dwie kolumny inne niż null i 1, jeśli jest tylko jedna, musisz dynamicznie utworzyć zapytanie.
Jeśli chcesz zawsze mieć 1 kolumnę, w której każdy wiersz zawiera wartość inną niż null, możesz to zrobić za pomocą unii.
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 = ?
Jeśli chcesz wiedzieć, z których kolumn pochodzą wartości, możesz zrobić coś takiego:
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 = ?
Uwaga:połączenie usuwa również zduplikowane wyniki. Jeśli chcesz zachować duplikaty, użyj UNION ALL
.