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 :

UPDATE pas même nombre de lignes que SELECT


Sujet :

Langage SQL

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut UPDATE pas même nombre de lignes que SELECT
    Bonjour.

    Toujours dans le cadre de l'analyse des données d'une base sur les bovins, dans le but d'en faire une BDD structurée correctement pour de futures études statistiques, j'ai 2 tables source : bovins et veaux.

    La table des veaux contient l'information sur leur mère et sur leur père, lesquels se trouvent dans la table des bovins.
    Ayant remarqué que le sexe de certains bovins n'était pas renseigné, j'ai effectué la requête suivante pour trouver les pères des veaux figurant dans la table bovins et n'ayant pas de sexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT b.*
    FROM bdni.bovins b
    INNER JOIN bdni.veaux v ON b.COD_PAYS = v.COD_PAYS_PERE 
      AND b.NUM_NAT = v.NUM_NAT_PERE
    WHERE b.SEXE = '' OR b.SEXE IS NULL
    Résultat : 124 lignes

    Je décide de mettre à jour ces lignes avec la requête suivante pour leur affecter le SEXE = '1' (mâle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE bdni.bovins b
    INNER JOIN bdni.veaux v ON b.COD_PAYS = v.COD_PAYS_PERE 
      AND b.NUM_NAT = v.NUM_NAT_PERE
    SET b.SEXE = '1'
    WHERE b.SEXE = '' OR b.SEXE IS NULL
    Résultat : 10 lignes seulement ont été mises à jour !
    Pourtant, les conditions de jointure de restriction sont les mêmes.

    Une idée du pourquoi du comment du quoi ou qu'est-ce ?

    EDIT : Base MySQL
    Vu que je n'ai pas eu de réponse satisfaisante à ma question dans le forum MySQL, je tente ma chance en Langage SQL...

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Dans ce cas la, tu ne peux pas faire ca ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE bdni.bovins b
    INNER JOIN bdni.veaux v ON b.COD_PAYS = v.COD_PAYS_PERE 
      AND b.NUM_NAT = v.NUM_NAT_PERE
      AND (b.SEXE = '' OR b.SEXE IS NULL)
    SET b.SEXE = '1'

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Mélanger les clauses de jointure et de restriction, c'est pas beau et il y a peut-être des cas où c'est carrément à éviter (dans les SELECT en tout cas).
    En plus dans le cas présent, je ne pense pas que ça change grand chose !

    Ce que je cherche, ce n'est pas forcément une écriture différente mais la raison du phénomène. Ou alors une écriture juste si quelqu'un m'explique pourquoi ce que j'ai fait serait faux.

Discussions similaires

  1. Nombre de ligne que retourne une requete
    Par newmar dans le forum JDBC
    Réponses: 4
    Dernier message: 22/05/2008, 01h28
  2. Nombre de ligne que retourne une ligne
    Par newmar dans le forum Hibernate
    Réponses: 7
    Dernier message: 15/05/2008, 12h40
  3. update d'un nombre de ligne
    Par Albat_r dans le forum kettle/PDI
    Réponses: 6
    Dernier message: 24/04/2008, 11h03
  4. Réponses: 1
    Dernier message: 01/08/2007, 21h10
  5. Réponses: 6
    Dernier message: 19/03/2007, 11h09

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