Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête SQL, sélectionnez uniquement si la colonne n'est pas nulle, sinon ne sélectionnez pas

Si vous souhaitez obtenir une ligne avec deux colonnes lorsqu'il y a deux colonnes non nulles, et 1 s'il n'y en a qu'une, vous devez créer dynamiquement votre requête.

Si vous voulez toujours avoir 1 colonne où chaque ligne contient une valeur non nulle, vous pouvez le faire avec une union.

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 = ?

Si vous voulez savoir de quelles colonnes proviennent les valeurs, vous pouvez faire quelque chose comme ceci :

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 = ?

Remarque :union supprime également les résultats en double. Si vous souhaitez conserver les doublons, utilisez UNION ALL .