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

Requêtes MySQL Discussion :

Modifier deux colonnes avec valeur d'une seule sous-requête


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut Modifier deux colonnes avec valeur d'une seule sous-requête
    Hello,

    j'ai une requête d'update sous MySql de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update t1
    set t1.c1 = t1.c1 + (select count(1) from t2 where t2.t1_id = t1.id)
    set t1.c2 = t1.c2 + (select count(1) from t2 where t2.t1_id = t1.id)
    Possibilité de faire qu'une seule fois la sous-requête ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Avec une virgule pour séparer les différentes colonnes de l'update.

    Par contre, pour des questions syntaxique de base, vous avez aussi le droit de chercher un peu par vous-même, dans les tutoriels ou la documentation officielle par exemple.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 888
    Points : 53 122
    Points
    53 122
    Billets dans le blog
    6
    Par défaut
    et une seule fois le mot clef SET. SET étant une clause et non pas un opérateur !

    A +

  4. #4
    Membre à l'essai
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Ok, j'ai fait une faute de syntaxe, j'ai pondu cette pseudo requête pour l'exemple sans la vérifier.
    Par contre je ne vois pas en quoi c'est une question syntaxique de base, j'ai l'impression que vous vous êtes focalisés sur ma coquille.

    Pour reprendre, j'ai cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE t1
    SET t1.c1 = t1.c1 + (SELECT count(1) FROM t2 WHERE t2.t1_id = t1.id)
    , t1.c2 = t1.c2 + (SELECT count(1) FROM t2 WHERE t2.t1_id = t1.id)
    Est-ce possible de faire qu'une seule fois la sous-requête ?
    Pour l'instant j'ai gardé ainsi la requête, mais la sous-requête peut être longue. A voir aussi si dans le plan d'exécution, mysql ne la fait pas qu'une seule fois.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ah oui vous avez raison.
    Pour la syntaxe, je me suis basé sur ce qu'il y a écrit dans la documentation mais je ne l'ai pas testé, mais ça vaut le coup d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE t1
      JOIN (SELECT t1_id, count(*) as nb FROM t2 GROUP BY t1_id) t2
        ON t2.t1_id = t1.id
       SET t1.c1 = t1.c1 + t2.nb
         , t1.c2 = t1.c2 + t2.nb;

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 208
    Points
    208
    Par défaut
    Bonjour,

    Je pense (et j'ai testé) que la bonne syntaxe est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE
     t1,
    ( SELECT count(1) AS nb, t2.t1_id AS t2t1id  FROM t2 GROUP BY t2.t1_id) lescount 
     SET t1.c1 = t1.c1 + nb, t1.c2 = t1.c2 + nb
    WHERE
      t1.t1_id = lescount.t2t1id
    En effet, le code de Waldar est presque bon mais le "update FROM" ne marchera pas.

    Cordialement

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Je voulais en effet écrire JOIN au lieu de FROM. Je corrige mon message précédent.

  8. #8
    Membre à l'essai
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Désolé pour le tps de réponse !

    ça fonctionne parfaitement, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/05/2010, 11h31
  2. Réponses: 4
    Dernier message: 05/06/2008, 09h51
  3. récupération de deux valeurs dans une seule checkbox
    Par khayri dans le forum Struts 1
    Réponses: 2
    Dernier message: 10/04/2007, 10h31
  4. Supprimer une colonne avec valeurs par défaut
    Par SlashOwnsU dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/09/2006, 10h10
  5. Réponses: 3
    Dernier message: 04/01/2006, 20h53

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