O WH tout n'est pas nul
Comment puis-je exécuter une requête MySQL qui sélectionne tout ce qui n'est pas nulle? Il serait quelque chose comme
SELECT * FROM schedule WHERE ((all)) IS NOT NULL
Dois-je enlever le tout et aller..?
SELECT * FROM schedule WHERE IS NOT NULL
source d'informationauteur Sam
Vous devez vous connecter pour publier un commentaire.
Vous devrez explicitement l'état de chaque colonne, si par exemple la
Vous pouvez concaténer les champs dans l'ordre pour écrire seulement un où la condition:
Il dépend de ce que vous entendez exactement par "tout ce qui n'est pas nulle":
toutes les colonnes ne doivent pas être
null
select * from schedule where col1 is not null AND col2 is not null AND ..
au moins une colonne doit être
non-null
select * from schedule where col1 is not null OR col 2 is not null OR ..
Au moins c'est comment vous le feriez en général "sql". Je ne sais pas si MySql a une syntaxe spéciale pour cela.
Vous avez besoin pour obtenir une liste des colonnes de votre table, en regardant la base de données information_schema.
Supposons que votre base de données est appelée
mydata
et votre table en question est nommémytable
. Vous pouvez obtenir la liste de la table nullable colonnes par la délivrance de la déclaration suivante:Notre requête finale ressemblera à ceci:
Tout ce qui nous manque maintenant, c'est la liste de nullable colonnes, séparées par des virgules. Nous allons utiliser la
GROUP_CONCAT
fonction de produire la déclaration finale, qui nous l'exécuterons comme ceci:Références:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html
J'ai juste regardé votre lié à la question et d'accord avec Guffa de la réponse que vous devriez normaliser votre base de données.
Ci-dessus ressemble plus à une feuille de calcul, puis quelque chose qui appartient à un SGBDR.
Pour répondre à vos préoccupations sur ce qui est la façon dont vous voulez qu'il s'affiche. Vous pourriez écrire un pivot de la requête et de le mettre dans une vue pour imiter votre structure actuelle de la table et de les utiliser pour votre requête d'affichage.
Cela permettra d'éviter la nécessité d'une horrible 24 colonnes clause where chaque fois que vous voulez la recherche de données ou de savoir si elle est NULLE comme dans cette question.
Si vous utilisez un autre langage de programmation combinée avec sql, vous pouvez accélérer ce processus en boucle au travers d'une liste de noms de colonnes et de l'aide d'un paramètre à faire si ce n'null vérifier plutôt que d'avoir à les taper tous individuellement.e.g
Je suggère l'utilisation de transactions de sorte que vous pouvez le faire ci-dessus dans un lot après la boucle for a course à travers.
D'utiliser le format XML de sorte que vous n'avez pas à parcourir tous vos colonnes:
cela fonctionne uniquement avec les types char et varchar type. Si vous rencontrez d'autres types de données, il déclenche une erreur.
incompatible types de données: attendu
CHAR
aiDATE
Remarque: ici,
FOO
est de type date.Je pas ce faire, mais pour remplacer quelqu'un d'autre idée horrible.surtout ne pas le faire -- c'est ce qu'ils suggèrent:
Ne pas le faire, mais au moins, il n'est pas si mauvais...
Au moins fonctionne sur d'autres versions de SQL, et certains compilateurs de l'étendre à une série de
IS NOT NULL
.Juste faire ce que l'on a accepté de répondre à dit