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 :

JOIN dans un DELETE?


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut JOIN dans un DELETE?
    Bonjour à tous.
    J'ai besoin de supprimer des enregistrements dans une table si ils existent déjà et que l'on cherche à les remettre.
    J'ai lu pas mal de choses différentes et j'ai testé des requêtes différentes mais rien de probant.
    La base est Oracle et voici ce que j'ai pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DELETE FROM ODS_BUDGET_HORIZON ODS WHERE ODS.ANNEE IN
        (
        SELECT ODS.ANNEE 
        FROM ODS_BUDGET_HORIZON ODS LEFT OUTER JOIN HORI_BUDGET_HORIZON HORI  
          ON ODS.ANNEE = HORI.ANNEE
         AND ODS.BUDGET = HORI.BUDGET
         AND ODS.RUBRIQUE_FRAIS = HORI.RUBRIQUE_FRAIS
         AND ODS.TEMPS = HORI.TEMPS
         AND ODS.DIRECTION = HORI.DIRECTION
         AND ODS.TYPE_FRAIS = HORI.TYPE_FRAIS)
    En fonction de ce que je lis soit il faut joindre soit il ne faut surtout pas car la jointure dans un delete c'est catastrophique.
    Je suis donc perdu

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 132
    Par défaut
    Pourrais-tu expliquer quelles lignes tu veux supprimer parce que, telle qu'est écrite ta requête, il y a de très fortes chances que ta table soit totalement vidée ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Alors en fait j'utilise la table HORI pour charger ODS mais je dois d'abord supprimer les lignes de ODS contenues dans HORI qui sont déjà dans ODS (afin d'éviter tout doublon).

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 132
    Par défaut
    Est-ce que MERGE ne simplifierait pas ton problème ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Je ne sais pas ce qu'est MERGE désolé

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 132
    Par défaut
    La documentation de la commande MERGE.

    Supprimer les lignes de ODS_BUDGET_HORIZON qui existent dans HORI_BUDGET_HORIZON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DELETE FROM ODS_BUDGET_HORIZON ODS
    WHERE   EXISTS
            (   SELECT  NULL 
                FROM    HORI_BUDGET_HORIZON HORI  
                WHERE   ODS.ANNEE           = HORI.ANNEE
                    AND ODS.BUDGET          = HORI.BUDGET
                    AND ODS.RUBRIQUE_FRAIS  = HORI.RUBRIQUE_FRAIS
                    AND ODS.TEMPS           = HORI.TEMPS
                    AND ODS.DIRECTION       = HORI.DIRECTION
                    AND ODS.TYPE_FRAIS      = HORI.TYPE_FRAIS
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Citation Envoyé par dmolnar Voir le message
    Alors en fait j'utilise la table HORI pour charger ODS mais je dois d'abord supprimer les lignes de ODS contenues dans HORI qui sont déjà dans ODS (afin d'éviter tout doublon).
    Si tu cherches à insérer des données, pourquoi utiliser DELETE ?
    - Soit, comme déjà proposé tu fais un MERGE qui te permet de gérer l'INSERT et au besoin (si nécessaire) l'UPDATE pour maintenir les lignes à jour.
    - Sinon un INSERT avec clause NOT EXISTS pour n'insérer que les lignes qui n'existent pas déjà (pour éviter les doublons comme tu l'as si bien dit)

Discussions similaires

  1. Combiner plusieurs LEFT JOIN dans une requète
    Par feanor12 dans le forum Access
    Réponses: 3
    Dernier message: 24/08/2006, 13h39
  2. fetch="join" dans mapping ignore en HQL ?
    Par azerr dans le forum Hibernate
    Réponses: 2
    Dernier message: 04/08/2006, 09h48
  3. problème ave LEFT JOIN dans MySql
    Par lm0210 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/05/2006, 19h46
  4. [Hibernate] Inner join dans hibernate
    Par Saloucious dans le forum Hibernate
    Réponses: 3
    Dernier message: 24/08/2005, 09h38
  5. Passage d'une requete en paramètre dans un delete
    Par jlamazou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2005, 17h58

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