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 PostgreSQL Discussion :

Update avec count et jointure


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Geek Data
    Inscrit en
    Septembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Geek Data

    Informations forums :
    Inscription : Septembre 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Update avec count et jointure
    Bonjour à tous,

    Gros problème de SQL et gros blocage

    J'ai 3 tables : Accident, Véhicule, Usager
    Accident contient accident_id
    Véhicule contient vehicule_id, accident_id, categ_adm_id
    Usager contient usager_id, vehicule_id, accident_id, gravite

    Je dois compter le nombre d'usagers étant blessés dans un accident en un vélo.
    velo étant categ_adm_id = 7
    blessé étant gravite = 3

    Pour cela, j'ai réaliser cette requête, mais je me retrouve avec le total de mon COUNT écrit sur l'ensemble de mes lignes dans ma table. J'en déduis qu'il faut ajouter une clause where dans mon update mais je n'y arrive pas du tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE fait_acc_staging SET nb_velo = (SELECT COUNT((fait_usager.usager_id)) FROM fait_usager
    INNER JOIN fait_acc_staging ON fait_acc_staging.accident_id = fait_usager.accident_id 
    INNER JOIN fait_vehicule ON fait_usager.vehicule_id = fait_vehicule.vehicule_id 
    WHERE fait_usager.gravite = (3) AND fait_vehicule.categ_adm_id = (7));
    Si quelqu'un peut m'aider, ça serait avec une énorme remerciement.
    En vous remerciant par avance.

    Patria

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous pouvez essayez avec MERGE, un peu comme ça aux erreurs de syntaxe près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    merge into fait_acc_staging fas
    using (SELECT fu.accident_id, COUNT(fu.usager_id) as cnt
             FROM fait_usager fu
            INNER JOIN fait_vehicule fv
               ON fu.vehicule_id = fv.vehicule_id 
            WHERE fu.gravite = 3 
              AND fv.categ_adm_id = 7
            group by fu.accident_id
          ) u
       on (fas.accident_id = fu.accident_id )
     when matched then update
      SET fas.nb_velo = u.cnt

  3. #3
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    PostgreSQL ne support pas le mot clé MERGE pour le moment. A la place il faut utiliser ON CONFLICT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    INSERT into fait_acc_staging fas
    SELECT COUNT(fu.usager_id) as cnt
             FROM fait_usager fu
            INNER JOIN fait_vehicule fv
               ON fu.vehicule_id = fv.vehicule_id 
            WHERE fu.gravite = 3 
              AND fv.categ_adm_id = 7
            group by fu.accident_id
          ON CONFLICT accident_id
    DO UPDATE  SET fas.nb_velo = EXCLUDED.nb_velo
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ok, j'avais vu cette doc, mais je viens de voir que c'est marqué develDocumentation, donc c'est peut être pas encore implémenté

Discussions similaires

  1. [MySQL-5.7] Update avec subquery et jointures
    Par franckysolo dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/11/2017, 12h26
  2. Requête avec COUNT et jointure
    Par xtremdisc dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/07/2011, 15h21
  3. Update avec alias et jointure
    Par olibara dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 26/03/2011, 18h00
  4. Update avec count
    Par baboun007 dans le forum Access
    Réponses: 4
    Dernier message: 22/12/2006, 11h10
  5. [PL/SQL] update avec jointure
    Par Fox_magic dans le forum Oracle
    Réponses: 6
    Dernier message: 09/12/2004, 12h19

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