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

SQL Oracle Discussion :

UPDATE d'un select sur un select


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut UPDATE d'un select sur un select
    Bonjour,
    J'ai un UPDATE un peu complex à faire: Je suppose qu'il s'agit d'un problème classique mais je ne m'y connais pas trop en SQL (Il est d'ailleurs possible que PL/SQL soit plus indiqué ici).
    Je doit UPDATER un champ d'une table à partir du décompte du nombre de liens entre cette table et une autre (à travers une table "lien").

    Voici ce que je voudrais faire:

    UPDATE (ChampsCompteur des Lignes concernées) SET ChampsCompteur = (select count() from TABLE de Lien where Ident du No de ligne que je suis en train d'updater)

    Est ce possible (ssi vous comprenez ce qui est écrit)
    Merci d'avance,
    LDPDC

  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 386
    Points
    18 386
    Par défaut
    Oui, aucun problème, n'oubliez pas d'ajouter le where exists si vous ne voulez pas vous retrouver avec votre champcompteur à null pour les cas où il n'y a pas de correspondance.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Oui, aucun problème, n'oubliez pas d'ajouter le where exists si vous ne voulez pas vous retrouver avec votre champcompteur à null pour les cas où il n'y a pas de correspondance.
    Bonjour, je reviens vers vous après quelques tests, j'avais un peu enterre cette question et malgré quelques tests, je n'ai pas réussi à faire fonctionner une telle requête.
    Mon problème se situe au niveau de la manière d'updater la ligne correcte. Comment faire pour signaler que la requête de décompte des liens doit bien porter sur la ligne dont l'update est en cours?

    Merci d'avance, LDPDC

  4. #4
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 879
    Points : 26 155
    Points
    26 155
    Billets dans le blog
    3
    Par défaut
    Si j'ai bien compris, tu as une première table (nommons-la TABLE_COUNT) qui a un champ avec des ID (A,B,C...) et un champ qui doit être mis à jour.

    Et une table de lien (nommons-la TABLE_LIEN) qui a un certain nombre de lignes avec un ID non unique (A,B,C).

    Tu veux pour la ligne contenant A de TABLE_CONT mettre à jour le champ de comptage par rapport au nombre de lignes contenant l'ID A de la TABLE_LIEN, et ainsi de suite pour toutes les valeurs ?

    Pourrais-tu aussi donner le code exact de ta requête (quitte à changer un peu les noms de la table et des champs s'ils sont trop confidentiels et/ou pas assez explicites).

    Edit :
    Auquel cas une des solutions consisterait à passer par une sous-requête avec un group by... par contre, niveau performance, je ne doute pas qu'il y a certainement une requête plus puissante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TABLE_COMPTE A
    SET A.NB_ENREG = 
    (SELECT COUNT(ID) 
    AS NB_ENG FROM TABLE_LIEN B
    WHERE B.ID = A.ID
    GROUP BY B.ID);

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Glutinus Voir le message
    Si j'ai bien compris, tu as une première table (nommons-la TABLE_COUNT) qui a un champ avec des ID (A,B,C...) et un champ qui doit être mis à jour.

    Et une table de lien (nommons-la TABLE_LIEN) qui a un certain nombre de lignes avec un ID non unique (A,B,C).

    Tu veux pour la ligne contenant A de TABLE_CONT mettre à jour le champ de comptage par rapport au nombre de lignes contenant l'ID A de la TABLE_LIEN, et ainsi de suite pour toutes les valeurs ?

    Pourrais-tu aussi donner le code exact de ta requête (quitte à changer un peu les noms de la table et des champs s'ils sont trop confidentiels et/ou pas assez explicites).

    Edit :
    Auquel cas une des solutions consisterait à passer par une sous-requête avec un group by... par contre, niveau performance, je ne doute pas qu'il y a certainement une requête plus puissante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TABLE_COMPTE A
    SET A.NB_ENREG = 
    (SELECT COUNT(ID) 
    AS NB_ENG FROM TABLE_LIEN B
    WHERE B.ID = A.ID
    GROUP BY B.ID);
    Merci pour ta réponse, cette solution semble fonctionner correctement. Finalement, comme je passe par du code java, je fais mon update en deux fois: d'abord me select ... group by pour compter puis je fais l'insert. Je vais comparer les performances...

    Merci beaucoup,

    LDPDC

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

Discussions similaires

  1. UPDATE avec SELECT sur la même table
    Par Invité dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/12/2007, 03h39
  2. activer un selected sur un select
    Par lodan dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 30/11/2007, 15h18
  3. Réponses: 2
    Dernier message: 12/09/2007, 14h03
  4. Update avec un select sur la même table
    Par Xunil dans le forum Administration
    Réponses: 5
    Dernier message: 09/04/2007, 16h40
  5. UPDATE SUR UN SELECT
    Par Alocer dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/10/2005, 20h09

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