Pokud chcete získat řádek se dvěma sloupci, když existují dva nenulové sloupce, a 1, pokud je pouze jeden, musíte svůj dotaz vytvořit dynamicky.
Pokud chcete mít vždy 1 sloupec, kde každý řádek obsahuje nenulovou hodnotu, můžete to udělat pomocí sjednocení.
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 = ?
Pokud chcete vědět, ze kterých sloupců pocházejí hodnoty, můžete udělat něco takového:
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 = ?
Poznámka:Sjednocení také odstraní duplicitní výsledky. Pokud si chcete ponechat duplikáty, použijte UNION ALL
.