Vous devez utiliser IS NOT NULL
. (Les opérateurs de comparaison =
y <>
les deux donnent UNKNOWN
con NULL
de part et d'autre de l'expression).
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Par souci d'exhaustivité, j'ajouterai que dans MySQL, vous pouvez également annuler l'attribut opérateur d'égalité à sécurité nulle mais ce n'est pas du SQL standard.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
Modifié pour refléter les commentaires. Il semble que votre table ne soit pas en première forme normale, auquel cas modifier la structure pourrait vous faciliter la tâche. Il existe cependant quelques autres façons de procéder...
SELECT val1 AS val
FROM your_table
WHERE val1 IS NOT NULL
UNION ALL
SELECT val2
FROM your_table
WHERE val2 IS NOT NULL
/*And so on for all your columns*/
L'inconvénient de la méthode ci-dessus est qu'elle scanne le tableau plusieurs fois, une fois pour chaque colonne. Cela peut éventuellement être évité par la méthode ci-dessous, mais je ne l'ai pas testée dans MySQL.
SELECT CASE idx
WHEN 1 THEN val1
WHEN 2 THEN val2
END AS val
FROM your_table
/*CROSS JOIN*/
JOIN (SELECT 1 AS idx
UNION ALL
SELECT 2) t
HAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/
2 votes
Que voulez-vous qu'il se passe s'il y a une ligne où certaines colonnes ont des valeurs NULL et d'autres des valeurs non NULL ?
0 votes
Je voudrais obtenir uniquement les valeurs des colonnes qui ne sont pas nulles, et renvoyer uniquement les valeurs des colonnes de la ligne qui ne sont pas nulles. Actuellement, j'utilise une boucle pour les filtrer. Est-il possible de le faire sans boucle ?
1 votes
@bryan - Quelle est la structure de votre table ? Toutes les colonnes ont-elles le même type de données ?
0 votes
Oui, ils sont tous de type valeur texte
1 votes
@bryan - Alors, à quoi ressemblerait votre ensemble de résultats idéal ? Un jeu de résultats à une colonne contenant toutes les valeurs non nulles ? Si ce n'est pas le cas, il serait utile de modifier votre question avec des données d'exemple et les résultats souhaités...
0 votes
Oui, je voudrais juste récupérer toutes les valeurs qui ne sont pas nulles dans cette ligne.
0 votes
Eh bien, vous pourriez le faire avec un tas de
UNION ... WHERE coln IS NOT NULL
mais cela permet d'analyser le tableau une fois pour chaque colonne. MySQL ne dispose pas d'unUNPIVOT
opérateur qui pourrait aider ici. Le moyen le plus efficace serait donc de le faire dans votre code. Le mieux que vous puissiez faire est d'exclure les lignes où toutes les colonnes sontNULL
. Etes-vous sûr que votre structure de table est normalisée ?0 votes
Je ne suis pas sûr de la normalisation. Qu'est-ce qui est normalisé ?
2 votes
@bryan - Il semble que votre tableau puisse avoir des groupes répétitifs entre les colonnes ? (Voir l'article Wiki pour une explication et une structure alternative suggérée si c'est le cas. fr.wikipedia.org/wiki/First_normal_form )
0 votes
Merci mec, je vais regarder ça.