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 :

Problème Exists in


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Par défaut Problème Exists in
    Bonjour à tous,

    J'ai un problème de requête à cause d'un not exists, et j'avoue ne pas comprendre le résultat de ma requête.

    Situation :
    je simplifie un maximum le problème
    2 table : table 1 sur base 1 et table 2 sur base 2

    table 1 est une copie de table 2 au niveau structure

    table 1(cgest,blabla)
    1|bla
    1|blu
    1|blo
    1|bli
    0|bly
    0|bls

    table 2 (cgest,blabla)
    1|bla
    1|blu
    1|blo


    Requête :
    En fait je souhaite récupérer les éléments dont le cgest est à 1 et qui ne sont pas déjà dans la table 2 et les insérer dans table 2.

    Voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    insert into table2
    select * from table1@base1
    where cgest = '1'
    and not exists (select * from table2);
    mais elle ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select count(*) from table1@base1
    where not exists (select * from table2)
    and cgest = '1';
    j'ai donc fait cette requête qui est sensée me retourner 1 mais que nenni elle me retourne 0 , Pourriez vous m'éclaircir ? j'ai du rater un truc monstrueux mais là je vois pas du tout

    Merci

  2. #2
    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
    Si table2 n'est pas vide alors il existe forcément une ligne

    Voila qui devrait aller mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO table2 t2
    SELECT * FROM table1@base1
    WHERE cgest = '1'
    AND NOT EXISTS (SELECT * FROM table2 WHERE ID = t2.ID);
    ID étant l'identifiant unique dans table2 pour s'assurer que la ligne n'est pas déjà présente.

  3. #3
    Membre confirmé Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Par défaut
    Je ne comprend pas trop "ID" c'est quoi un champ de ma table ou quelque chose de générique, j'ai copier texto et donc "identificateur non valide".

    En mode boulet désolé

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    visiblement chez vous ID est en fait la colonne cgest

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO table2 t2
    SELECT * FROM table1@base1 t1
    WHERE cgest = '1'
    AND NOT EXISTS (SELECT * FROM table2 WHERE cgest = t1.cgest  and blabla = t1.blabla);

  5. #5
    Membre confirmé Avatar de jlm22
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2010
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 203
    Par défaut
    Impeccable Ojo77 et Orafrance merci à vous 2. J'ai modifié à ma sauce pour que ça fonctionne.
    Bref nickel

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Bonjour,

    Comme cgest semble ne pas être un id unique et comme il semble aussi que vous n'avez aucune clé d'unicité vous ne pouvez alors faire que comme cela a déjà été proposé (c'est à dire avec cgest et les autres champs aussi)

    Voici ci-dessous un exemple très simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    mhouri.world > create table table1(cgest number, c varchar2(10));
     
    Table created.
     
    mhouri.world > create table table2(cgest number, c varchar2(10));
     
    Table created.
     
    mhouri.world > insert into table1 values (1, 'bla');
     
    1 row created.
     
    mhouri.world > insert into table1 values (1, 'blu');
     
    1 row created.
     
    mhouri.world > insert into table1 values (1, 'blo');
     
    1 row created.
     
    mhouri.world > insert into table1 values (1, 'bli');
     
    1 row created.
     
    mhouri.world > insert into table2 values (1, 'bla');
     
    1 row created.
     
    mhouri.world > insert into table2 values (1, 'blu');
     
    1 row created.
     
    mhouri.world > insert into table2 values (1, 'blo');
     
    1 row created.
     
    mhouri.world > commit;
     
    Commit complete.
     
     
    mhouri.world >ed
    Wrote file afiedt.buf
     
      1  insert into table2 
      2  select * from table1 t1
      3  where t1.cgest = 1
      4  and not exists (select null
      5                   from table2 t2
      6                   where t2.cgest = t1.cgest
      7                   and   t2.c     = t1.c
      8*                )
    mhouri.world >/
     
    1 row created.
     
    mhouri.world > commit;
     
    Commit complete.
     
    mhouri.world > select * from table1;
     
         CGEST C                                                                                                       
    ---------- ----------                                                                                                
             1 bla                                                                                                          
             1 blu                                                                                                          
             1 blo                                                                                                          
             1 bli                                                                                                          
     
    mhouri.world > select * from table2;
     
         CGEST C                                                                                                            
    ---------- ----------                                                                                                   
             1 bla                                                                                                          
             1 blu                                                                                                          
             1 blo                                                                                                          
             1 bli
    Préferez également plutôt ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     AND NOT EXISTS (SELECT NULL
                                      FROM table2 t2
                                      where t2.cgest = t1.cgest
                                       and   t2.c     = t1.c
                                      )
    à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     AND NOT EXISTS (SELECT *
                                      FROM table2 t2
                                      where t2.cgest = t1.cgest
                                       and   t2.c     = t1.c
                                      )
    car en effet cela ne sert à rien de sélectionner tous les champs pour valider l'existence de l'enregistrement

    Bien à vous

    Mohamed Houri

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

Discussions similaires

  1. problème exist(antiel) ?
    Par Kropernic dans le forum Langage SQL
    Réponses: 16
    Dernier message: 28/02/2008, 11h10
  2. [VB6]problème modificaion projet existant
    Par gorgonite dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/03/2006, 08h16
  3. [MySQL] upload : problème fichiers existants dans la bdd ?
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/02/2006, 11h29
  4. Réponses: 8
    Dernier message: 26/01/2006, 14h47
  5. Problème "The specified service does not exist as an ..
    Par Rimak2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2005, 21h24

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