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 :

Merge filtré avec une clause WHERE


Sujet :

SQL Oracle

  1. #1
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Merge filtré avec une clause WHERE
    Bonjour,

    Je dois restaurer une table à partir d'une sauvegarde, mais ma requête n'est pas franchement optimisée,
    je crois qu'elle le fait sur toute la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Id_question | id_codeuai | reponse_N | reponse_N1 ....
    1                 25001          10             11
    2                 25001          11             0
    3                 27002          12             3
    la clef primaire est basée sur id_question et id_codeuai.

    J'ai fais la requête suivante

    REPONSES est la tables d'origine et REPONSES_SAUV la sauvegarde.
    Je voudrais simplement mettre à jour la question dont l(ID est 56 par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MERGE INTO REPONSES U1
    USING (SELECT * FROM REPONSES_SAUV) U2
    ON (U1.ID_QUESTION = U2.ID_QUESTION AND U1.CODE_UAI = U1.CODE_UAI)
    WHEN MATCHED THEN UPDATE SET U1.REPONSE_N = U2.REPONSE_N, U1.REPONSE_N1 = U2.REPONSE_N1, U1.REPONSE_N2 = U2.REPONSE_N2 , U1.REPONSE_N3 = U2.REPONSE_N3;
    Mais je ne sais pas ou mettre la clause WHERE car si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MERGE INTO REPONSES U1
    USING (SELECT * FROM REPONSES_SAUV WHERE ID_QUESTION=56) U2
    ON (U1.ID_QUESTION = U2.ID_QUESTION AND U1.CODE_UAI = U1.CODE_UAI)
    WHEN  MATCHED THEN UPDATE SET U1.REPONSE_N = U2.REPONSE_N, U1.REPONSE_N1 =  U2.REPONSE_N1, U1.REPONSE_N2 = U2.REPONSE_N2 , U1.REPONSE_N3 =  U2.REPONSE_N3;
    J'ai la réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-30926 : Impossible d'obtenir un ensemble de lignes stables dans les tables sources ....
    Si vous avez une idée ... j'y retourne
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Si je ne m'abuse pas il doit y avoir plusieurs enregistrements dans la table source repornse_sauv avec même question_id (56) et même code_uai.

  3. #3
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut Euh non je ne crois pas
    Bonjour,

    Je viens de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM REPONSES WHERE ID_QUESTION = 56 GROUP BY ID_QUESTION,CODE_UAI HAVING count(*) > 1;
    il me retourne rien, donc le couple est bien unique ???

    Olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Moi j'ai parlé de REPONSES_SAUV...

Discussions similaires

  1. Mettre à jour un champ Boolean avec une clause "WHERE"
    Par niano dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/10/2007, 11h29
  2. DELETE avec une clause where
    Par liberty74 dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/08/2007, 11h56
  3. Jointure avec une clause where
    Par pepi22 dans le forum Langage SQL
    Réponses: 15
    Dernier message: 19/08/2007, 10h24
  4. Insert avec une clause where !?
    Par Thomad dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/08/2006, 09h55
  5. [super requete] Dumper un model avec une clause where
    Par elievar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2005, 17h05

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