Sélectionnez Requête dans SQL + Toutes les valeurs dans les colonnes

J'ai une table Table1 avec les colonnes id1, id2, id3 toutes les colonnes sont nullables

Je peux entrer une valeur nulle ou une valeur pour toutes les colonnes des lignes.

Ma question est que je dois sélectionner les lignes dont toutes les valeurs de colonne ne doivent pas être nulles.

Merci


Il y a environ 300 colonnes dans le tableau. Je ne peux pas faire la propriété is null pour toutes les colonnes dans where condition.

Vous devez faire ceci:

 SELECT * FROM yourtable WHERE column1 IS NOT NULL AND column2 IS NOT NULL AND column3 IS NOT NULL AND .... 

La réponse à utiliser une "fonction" pour tester les valeurs nulles est correcte. La syntaxe dépend de la database. Si ISNULL () n'existe pas dans votre database, essayez:

SELECT * FROM Table1 WHERE id1 n'est pas NULL et id2 n'est pas NULL ET id3 n'est pas NULL

Et il n'y a aucun moyen de réduire cela même si vous avez 300 champs dans votre table.

Je ne comprends pas pourquoi cette question obtient des critiques négatives – Cette question peut être étendue aux personnes qui ont hérité d'une grande table d'un non-programmeur dans une communauté (je sais d'expérience précédente), et de même si la table est inconnue. Pour rétrograder cela parce que ses «300» colonnes est inutile OMI.

Le mieux est de repenser la design de vos tables, en les divisant si nécessaire.

sinon le meilleur pari est de le faire progmatiquement – saisir les métadonnées de la table, itérer à travers les colonnes et créer le SQL à partir de là. La plupart des langages de encoding ont access aux métadonnées des tables, à défaut d'un second SQL.

Mais, le meilleur pari est de penser comment je peux concevoir la table mieux.

Voulez-vous dire que vous voulez sélectionner les lignes où aucune des colonnes est nulle?

 SELECT id1, id2, id3 
 DE Table1 
 WHERE id1 n'est pas NULL et id2 n'est pas NULL et id3 n'est pas NULL

Désolé – je suis peut-être un peu épais ici. Vous essayez de récupérer les lignes qui ont quelque chose dans une des colonnes (autre que la colonne id)?

Tu ne peux pas faire;

 créez vw_View_Fields1to5 en tant que 
   select id des employés 
   où name n'est pas null ou description n'est pas null ou field3 n'est pas null 
   ou field4 n'est pas nul ou field5 n'est pas nul;
 créez vw_View_Fields6to10 en tant que 
   select id des employés 
   où field6 n'est pas null ou field7 n'est pas null ou field8 n'est pas null 
   ou le champ 9 n'est pas nul ou le champ 10 n'est pas nul;
 (etc)

 select l'ID de vw_View_Fields1to5
 syndicat 
 select l'ID de vw_View_Fields6to10 .... (etc)

Vous devez prendre un DISTINCT ou quelque chose pour couper les lignes qui tombent dans plus d'une vue, bien sûr.

Si vous voulez que les lignes qui n'ont RIEN dans n'importe quelle colonne autre que id, vous passiez ' ou blah is not null ' à ' et blah is null ' (etc).

Est-ce que cela a du sens … ou est-ce que je manque quelque chose? 🙂

EDIT: En fait, je crois que le process UNION ne fera que ramener des lignes distinctes de toute façon (par opposition à UNION ALL), mais je peux me tromper – je n'ai pas encore essayé … (encore!)

vous pouvez essayer la procédure stockée CLR (si vous utilisez SQL Server) ou déplacer cette logique vers l'autre couche de votre application en utilisant C # ou n'importe quelle langue que vous utilisez.

Une autre option consiste à créer la requête de manière dynamic, concaténant votre clause WHERE et EXECUTER votre requête générée dynamicment.

Êtes-vous en train de lire datatables, ou voulez-vous essayer de mettre à jour les lignes en question?

Je me demandais s'il y a quelque chose que vous pouvez faire en faisant une demi-douzaine de vues, chacune basée sur 50 colonnes, par exemple, NOT NULL, et en les reliant avec une sorte d'instruction EXISTS ou UNION?

Pouvez-vous nous en dire un peu plus sur ce que vous voulez faire avec votre jeu de résultats?

Pour la première fois, quel que soit Georgi ou engram ou robsoft est le path. Cependant, pour les choses suivantes, vous pouvez, si possible, modifier la table et append une autre colonne, appelée CSELECTFLAG, et la mettre initialement à Y pour toutes les colonnes qui ont des valeurs et N pour les autres. Chaque fois qu'il y a un insert, cela doit être mis à jour. Cela permettrait de rendre vos requêtes ultérieures plus rapides et plus faciles.