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 :

Selection de lignes + insertion if not exists


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 64
    Par défaut Selection de lignes + insertion if not exists
    Bonjour à tous,
    Je viens à peine de débuter sous oracle et je dois construire un requête que d'ailleurs je n'aurai jamais pensé faire sur un autre type de base de données.

    Voilà le problème :
    - Je dois sélectionner des lignes à partir d'une table.
    - Une fois que j'ai ces lignes, je dois les insérer dans une autre table seulement si elle n'existe pas.

    Voici la requête pour la sélection (un peu simplifiée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT purse.DESCRIPTION, tr.partnerid ID_PARTNER
    FROM transactions tr, purses purse
      WHERE purse.ID =tr.purseid
     group by purse.DESCRIPTION, tr.partnerid
     order by purse.DESCRIPTION;
    Je récupère bien mes lignes, maintenant : comment puis faire pour insérer chaque ligne si et seulement si aucune ligne ne contient déjà la "DESCRIPTION" et le "partnerid" ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Dans quelle table voulez-vous faire votre insertion ?

    Que faites-vous si des données sont déjà présentes ?
    Par exemple l'ID existe mais la description est différente.

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Tu peux utiliser MERGE

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 64
    Par défaut
    L'insertion doit se faire dans une table à part (purses_cplt).
    Une ligne unique = une combinaison (description + partnerid) unique.
    Pour simplifier si je prends comme exemple des chiffres :
    Imaginons que sur ma table j'ai les lignes suivantes (description, partnerid) :
    1 1
    1 2
    2 1
    2 3
    4 5
    1 3

    Si lors de la sélection je récupère des lignes avec :
    1 4
    4 2
    2 2
    Je dois les insérer.

    Si dans la sélection il y a les lignes :
    1 1
    2 3
    1 3
    Je ne dois pas les insérer, il ne faut pas les prendre en compte.

    Je ne connais pas MERGE, je vais essayer de regarder.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Si vous ne faites pas de mises à jour, pas besoin de MERGE.

    Vous pouvez faire un test de non-existence avec NOT EXISTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    INSERT INTO purses_cplt (description, partnerid)
    SELECT DISTINCT
           pr.description, tr.partnerid
      FROM transactions tr
           INNER JOIN purses pr
             ON pr.ID = tr.purseid
     WHERE NOT EXISTS (select null
                         from purses_cplt pc
                        where pc.description = pr.description
                          and pc.partnerid   = tr.partnerid);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 64
    Par défaut
    La solution proposée par Waldar fonctionne parfaitement.
    Merci à tous.

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

Discussions similaires

  1. INSERT IF NOT EXISTS
    Par finiderire dans le forum Langage SQL
    Réponses: 12
    Dernier message: 27/03/2012, 17h44
  2. [MySQL] INSERT IF NOT EXISTS
    Par Iloyo dans le forum MySQL
    Réponses: 7
    Dernier message: 17/03/2010, 15h26
  3. Sunopsis ODI: Insertion if not exists
    Par Marie-Thérèse dans le forum ODI (ex-Sunopsis)
    Réponses: 1
    Dernier message: 06/08/2009, 10h43
  4. insert et not exists
    Par farenheiit dans le forum SQL
    Réponses: 3
    Dernier message: 10/07/2009, 16h45
  5. Insert .. where not exists
    Par Zolex dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/03/2007, 11h26

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