Wenn Sie eine Zeile mit zwei Spalten erhalten möchten, wenn es zwei Nicht-Null-Spalten gibt, und 1, wenn es nur eine gibt, müssen Sie Ihre Abfrage dynamisch erstellen.
Wenn Sie immer 1 Spalte haben möchten, in der jede Zeile einen Nicht-Null-Wert enthält, können Sie dies mit einer Vereinigung tun.
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 = ?
Wenn Sie wissen möchten, aus welchen Spalten die Werte stammen, können Sie Folgendes tun:
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 = ?
Hinweis:Union entfernt auch doppelte Ergebnisse. Wenn Sie Duplikate behalten möchten, verwenden Sie UNION ALL
.