null以外の列が2つあるときに2つの列を持つ行を取得し、1つしかない場合は1つの行を取得する場合は、クエリを動的に作成する必要があります。
各行にnull以外の値が含まれる列を常に1つにしたい場合は、ユニオンを使用して行うことができます。
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 = ?
どの列から値が取得されるかを知りたい場合は、次のようにすることができます。
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 = ?
注:ユニオンは重複する結果も削除します。重複を保持したい場合は、UNION ALL
を使用してください 。