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 :

Remplir la première colonne à 0


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    sapeur pompier
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : sapeur pompier

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Remplir la première colonne à 0
    bonjour,
    un petit souci dont je ne trouve pas la solution sur le web, c'est pourtant tout bête à mon avis.

    dans une fonction UPDATE je souhaiterai mettre à jour la 1er valeur nul d'un série de colonne, ma requête n'agira que sur une ligne.

    Quelqu'un pourrait-il me dépanner?

    Merci Persannes.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 143
    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 143
    Points : 38 918
    Points
    38 918
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Je ne vois pas bien l'intérêt de la requête, mais voici une solution possible, assez pénible à coder si la table a beaucoup de colonnes.
    Ici un exemple avec 3 colonnes, C1 et C3 de type numérique, C2 de type char :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update T2 set
           C1=case when C1 is null then  0  
                                   else C1
              end
         , C2=case when C1 is not null and C2 is null then 'Z' 
                                                      else C2
              end
         , C3=case when C1 is not null and C2 is not null and C3 is null then 99 
                                                                         else C3
              end          
    ;

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    sapeur pompier
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : sapeur pompier

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Si je pose la question c'est qu'elle a un intérêt dans mon domaine
    En tout cas merci, j'avais pensé à un truc comme ça, ma avec 8 colonnes ca va être assez pénible en effet.
    mais sans autre choix allons-y !!

    encore merci

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    sapeur pompier
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : sapeur pompier

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    bon alors finalement, ça marche presque bien sauf que cette requete me rempli les 3 colonnes si elles sont vide.

    Je n'ai pas du être assez explicite dans ma demande.

    Je souhaiterai que si la colonne 1 est null seul celle-ci soit rempli.

    si la 1 est prise que seulement la 2 soit rempli.

    le probleme c'est que sql ne met pas a jour les données pendant l éxécution.

    Je pense finalement que je fais ajouter une colonne qui va s'incrémenté à chaque requete cela rempli la case vide, en fonction de ce numéro.

    Après si y'a des requetes moins lourdes que cela je suis preneur.

    merci encore pour votre aide.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 143
    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 143
    Points : 38 918
    Points
    38 918
    Billets dans le blog
    9
    Par défaut
    Bonjour persannes

    Citation Envoyé par persannes Voir le message
    bon alors finalement, ça marche presque bien sauf que cette requete me rempli les 3 colonnes si elles sont vide.

    Je n'ai pas du être assez explicite dans ma demande.

    Je souhaiterai que si la colonne 1 est null seul celle-ci soit rempli.

    si la 1 est prise que seulement la 2 soit rempli.
    Absolument pas : c'est bien ce que fait cette requête qui ne met à jour qu'une seule colonne "null".
    Si C1 est null alors elle est remplacée et aucune autre colonne n'est modifiée
    Sinon
    Si C2 est nulle, alors elle est remplacée et aucune autre colonne n'est modifiée
    Sinon
    Si C3 est nulle, alors elle est remplacée


    Voici un exemple de jeu d'essai :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    create table T2(C1 integer ,
                    C2 char(2) ,
                    C3 integer
                   )
    ;
    insert into T2(C1, C2, C3)
    values (1,    'AA',  10)
         , (2,    'BB',  null)
         , (3,    null,  30)
         , (4,    null,  null)
         , (null, 'EE',  50)
         , (null, 'FF',  null)
         , (null, null,  70)
         , (null, null,  null)
    ;

    Contrôle du contenu de la table avant update :
    C1 C2 C3
    1 AA 10
    2 BB null
    3 null 30
    4 null null
    null EE 50
    null FF null
    null 70 null
    null null null

    Exécution se la requête
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    update T2 set
           C1=case when C1 is null then  0  
                                   else C1
              end
         , C2=case when C1 is not null and C2 is null then 'Z' 
                                                      else C2
              end
         , C3=case when C1 is not null and C2 is not null and C3 is null then 99 
                                                                         else C3
              end          
    ;

    Contenu de la table après update :
    C1 C2 C3
    1 AA 10
    2 BB 99
    3 Z 30
    4 Z null
    0 EE 50
    0 FF null
    0 null 70
    0 null null

    Le résultat est donc strictement conforme à l'expression de besoin.

  6. #6
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut
    Salut, il faut aussi souligner ici que dans l'univers des bases de données null n'est zéro. NULL est u'e valeur indéfinie. Colonne vide.

    Cordialement.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 143
    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 143
    Points : 38 918
    Points
    38 918
    Billets dans le blog
    9
    Par défaut
    Non : à part pour Oracle, "null" n'est pas vide

    Voici un petit exemple pour le prouver :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with T1(C1, C2) as
          (select '',   ''    union all
           select '',   null  union all
           select null, null
           )
    select coalesce(C1, 'null')  as C1
         , coalesce(C2, 'null')  as C2
         , case when C1=C2 then 'égal'
                else 'différent'
           end as test
    from T1

    Avec un autre SGBD que Oracle, on obtient :
    C1 C2 test
    égal
    null différent
    null null différent

    Null n'est donc pas égal à vide

    Null est un marqueur de valeur inconnue, c'est pour ça que "null" n'est pas égal à "null" !
    Vide est une valeur : la valeur vide

  8. #8
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 502
    Points : 770
    Points
    770
    Par défaut
    Merci 🙏 beaucoup pour la précision.
    Vraiment Merci.

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 007
    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 : 8 007
    Points : 30 946
    Points
    30 946
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Null values vs null marks.

    Citation Envoyé par escartefigue Voir le message
    Null est un marqueur de valeur inconnue

    Exact. Pour reprendre les termes des pères de la théorie relationnelle, Null est un marqueur d’information (valeur) absente.

    A ce sujet, je vous renvoie à l’ouvrage de C.J. Date Relational Database Writings 1985-1989 (1990), le plus fin connaisseur du sujet et qui a écrit au chapitre 8, « Not is not “Not” » :

    Following normal convention, I will use the term “null” as a convenient shorthand to mean that some item of information is missing. For example, the statement that “Joe’s salary is null” is intended to mean that there is a position in the database for recording Joe’s salary, but no value is recorded at that position at the present time. Note immediately, therefore, that null is not a value; rather it is a representation of the fact that there is no value. [...] Because null is not a value, the term “null value” is deprecated.

    Bien entendu, Date fait observer que le père de la théorie relationnelle, E.F. Codd, demande qu’on parle de marques au lieu de nulls (voir l’article de celui-ci Missing Information (Applicable and Inapplicable) in Relational Databases, 1986). « The fact that Joe’s salary Joe’s salary is missing would be expressed as “Joe’s salary is marked” (voir aussi l’ouvrage de Codd (The Relational Model for Database Management, Version 2).

    Comme tout le monde, avant d’en venir aux marqueurs, Codd et Date utilisaient initialement l’expression « null value », mais cela ne dura évidemment qu’un temps.

    Les confusions sont bien entendu fréquentes, ne serait-ce que de la part des rédacteurs de la norme SQL :

    The data type boolean comprises the distinct truth values True and False. Unless prohibited by a NOT NULL constraint, the boolean data type also supports the truth value Unknown as the null value. This specification does not make a distinction between the null value of the boolean data type and the truth value Unknown that is the result of an SQL <predicate>, <search condition>, or <boolean value expression>; they may be used interchangeably to mean exactly the same thing.

    C’est là une boulette, immanquablement relevée par Peter Gulutzan (SQL-99 Complete, Really, chapitre 9), qui précise que selon la norme il revient au même de dire : « Je ne sais pas » et « Je sais que l’information est absente » 
    (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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2007, 16h32
  2. [C#][VS 2005]Supprimer la première colonne dans un DatagridView
    Par cmoiscrat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/06/2006, 15h20
  3. Figer la première ligne et la première colonne d'un tableau
    Par kcizth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 09/06/2006, 10h48
  4. [JTable] Insertion d'images dans la première colonne
    Par cocolepelo dans le forum Composants
    Réponses: 2
    Dernier message: 29/11/2005, 15h17
  5. where sur la première colonne
    Par r-zo dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/07/2003, 09h55

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