IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Y a t il une requête qui renvoie les colonnes d'une table qui ont toujours une valeur nulle ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut Y a t il une requête qui renvoie les colonnes d'une table qui ont toujours une valeur nulle ?
    Bonjour, j'ai une table ELEMENT(ID_ELEMENT, DATE_DEBUT, COEFFICIENT, COUT)

    Je voudrais savoir comment peut on écrire une requête SQL qui renvoi les colonnes qui sont toujours vides = 'null' (jamais saisies). J'ai cherché sur internet mais je n'arrive pas à trouver une solution,

    Merci de me proposer vos idées !

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    une possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select count(*) from ma_table where ma_colonne is not null
    Si comptage = zéro, alors toutes les lignes de ma_table ont une valeur nulle pour ma_colonne

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Merci infiniment, cela fonctionne très bien ! Mon problème c'est que ma table contienne une soixantaine de données, je souhaiterai que je n'aurai pas besoin d'écrire chaque champs individuellement dans le WHERE pour le tester, y a t il un moyen de vérifier toutes les colonnes de la table à la fois ? Merci encore une fois.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Sous réserve que les stats soient à jour, on doit pouvoir utiliser cette requete :
    COLCARD > -1 pour ne prendre que les tables ayant des statistiques
    Si high2key est vide, c'est que toutes les lignes sont sont à null pour la colonne (à vérifier quand meme )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT SUBSTR(TBCREATOR, 1, 8) AS CREA,     
           SUBSTR(TBNAME,    1, 8) AS TABL,     
           SUBSTR(NAME,      1, 8) AS COLN,     
           SUBSTR(CHAR(HIGH2KEY), 1, 15) AS H2K,
           SUBSTR(CHAR(LOW2KEY),  1, 15) AS L2K,
           DATE(STATSTIME)                      
    FROM SYSIBM.SYSCOLUMNS                      
    WHERE NULLS = 'Y'                           
      AND COLCARD > -1                          
      AND HIGH2KEY =''                          
      AND DATE(STATSTIME)> '2015-01-01'         
    FETCH FIRST 500 ROWS ONLY

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par doudou2015 Voir le message
    Merci infiniment, cela fonctionne très bien ! Mon problème c'est que ma table contienne une soixantaine de données, je souhaiterai que je n'aurai pas besoin d'écrire chaque champs individuellement dans le WHERE pour le tester, y a t il un moyen de vérifier toutes les colonnes de la table à la fois ? Merci encore une fois.
    Le plus souvent seules quelques colonnes sont nullables, Est-ce que les ~ 60 colonnes sont nullables
    - si oui tenter avec ma requete ci-dessus sur la table SYSCOLUMN
    - si non, ma première requete répétée autant de fois (avec des union si besoin) que de colonnes nullables sera préférable

  6. #6
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Le plus souvent seules quelques colonnes sont nullables, Est-ce que les ~ 60 colonnes sont nullables
    - si oui tenter avec ma requete ci-dessus sur la table SYSCOLUMN
    - si non, ma première requete répétée autant de fois (avec des union si besoin) que de colonnes nullables sera préférable
    Mhh, sur le côté nullable, avec une table à 60 colonnes.je pense que tu es optimiste !

    Selon le SGBD, les requêtes possibles sont différentes. Globalement le plus simple est de faire une requête qui récupère les noms des colonnes et construit une requête en mode UNION ALL qui fait le taf.
    => Mais pour ça il faut connaitre ledit SBGD?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    @escartefigue je vous remercie pour vos propositions, mais pour votre dernière requête elle me parait si complexe que je n ai pas pu l utiliser
    finalement j'ai procédé à une page PHP dans laquelle je boucle sur tous les champs, j'ai fait environ 6 requêtes parce que en fait il fallait que je regroupe les résultats obtenus sur quelques critères et en utilisant d'autres tables,

    si vous avez quand même une proposition plus automatique avec SQL uniquement je voudrais bien la savoir

    @Rei Ichido : merci pour votre commentaire je ne sais justement faire du pl sql et pour l instant il me reste pas assez du temps pr faire des essaies .. :/

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    pour votre dernière requête elle me parait si complexe que je n ai pas pu l’utiliser
    La table SYSIBM.SYSCOLUMNS faisant partie des tables du catalogue de DB2 for z/OS, si vous utilisez un autre SGBD le noms de ses colonnes (à l'exception peut-être de DB2 UDB) ne peuvent que vous paraître barbares et inexploitables...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Autre solution purement SQL mais peut-être qu'avec 60 colonnes la requête sera trop longue pour le SGBD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT
    	SUM(CASE WHEN col1 IS NULL THEN 0 ELSE 1 END) AS col1_not_null,
    	SUM(CASE WHEN col2 IS NULL THEN 0 ELSE 1 END) AS col2_not_null,
    	-- Etc.
    FROM la_table
    S'il y a au moins une valeur dans une colonne, celle-ci affichera un nombre supérieur à zéro.

    J'ose espérer que le but de cette recherche est d'éliminer le bonhomme NULL de la BDD ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/01/2014, 20h30
  2. Réponses: 2
    Dernier message: 26/07/2007, 15h27
  3. Requête qui renvoie les valeurs les plus souvent affichés
    Par athos7776 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 25/07/2007, 18h54
  4. Réponses: 11
    Dernier message: 16/03/2007, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo