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

PL/SQL Oracle Discussion :

pb avec not exists


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut pb avec not exists
    Bjrs,

    Je veux faire une selection de données qui existent dans une table A mais pas dans la table B.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT DISTINCT 
            chp1, 
            chp2,
            chp3
            FROM TABLE_A b 
            WHERE 
           not exists( 
                            SELECT chp1, 
            chp2,
            chp3
    from TABLE_B);
    Je précise que TABLE_A et TABLE_B contiennent d'autres colonnes qui ne sont pas les memes entre les deux tables.
    ma req me retourne rien, malgres qu'il y a des données dans la TABLE_A mais non dans B.

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut minus
    Ta requete ne donne rien c bien normal car la clause where est toujours interpretée a false.
    ce qui tu dois faire c faire une faire c utiliser "minus"
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT DISTINCT  chp1, chp2, chp3
            FROM TABLE_A 
     minus 
     SELECT chp1, chp2,    chp3
             FROM TABLE_B

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    Bonjour,
    1. au niveau de la SELECT imbriquée tu peux mettre "Select 1 ..."
    2. en plus, il te manque la jointure entre les deux tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT chp1, chp2, chp3
            FROM TABLE_A b 
            WHERE NOT EXISTS(SELECT 1 FROM TABLE_B 
    WHERE b.Col_Pk = TABLE_B.Col_Pk);

  4. #4
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Points : 146
    Points
    146
    Par défaut
    Bonjour,

    Je pense que ça devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT 
            chp1, 
            chp2,
            chp3
            FROM TABLE_A a 
            WHERE 
           NOT EXISTS( SELECT 1
         FROM TABLE_B b
         where a.chp1 = b.chp1
         and a.chp2 = b.chp2
         and a.chp3 = b.chp3);
    Sylvain

    EDIT : dommage la même réponse a été postée plus rapidement ...
    Sylvain


  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par iSylvain Voir le message
    Bonjour,

    Je pense que ça devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT 
            chp1, 
            chp2,
            chp3
            FROM TABLE_A a 
            WHERE 
           NOT EXISTS( SELECT 1
         FROM TABLE_B b
         where a.chp1 = b.chp1
         and a.chp2 = b.chp2
         and a.chp3 = b.chp3);
    Sylvain

    EDIT : dommage la même réponse a été postée plus rapidement ...
    ATTENTION: n'utiliser pour la jointure que les colonnes qui font partie de la clé primaire. C pas nécessairement les colonnes de la SELECT.

  6. #6
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Points : 146
    Points
    146
    Par défaut
    ATTENTION: n'utiliser pour la jointure que les colonnes qui font partie de la clé primaire. C pas nécessairement les colonnes de la SELECT.
    Tout à fait. Merci de la précision.

    Sylvain
    Sylvain


  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    Merci pr vos reponses,

    J'ai essayé avec Minus => j'ai bien le résultat attendu
    Mais qd j'utilise Select 1... => j'ai rien comme résultat. Je précise que je n'ai pas de PK dans les 2 tables.

    Pourriez-vous m'expliquer pourquoi?
    Merci

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    t'as aucune relation entre les 2 tables?????

  9. #9
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    Table B est en sorte le résultat de la table Table A. et je veux stocker juste les nouvelles lignes. aussi, La tables B est mise jour par une autre Table C

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 119
    Points : 114
    Points
    114
    Par défaut
    je veux dire par relation une jointure entre ces deux tables. si aucune jointure, tu peux utiliser minus, sinon tu peux utiliser minus et SELECT ... NOT EXISTS avec la jointure

Discussions similaires

  1. Problème pour la Division avec NOT EXISTS
    Par myzu69 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/11/2007, 14h50
  2. sql requête avec NOT EXISTS
    Par wang_xue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/10/2007, 19h48
  3. Requête avec NOT EXISTS
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/07/2007, 10h16
  4. [SQL Server] Probleme avec not exists
    Par maxxou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2006, 16h51
  5. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20

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