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

Oracle Discussion :

Comment retourner les enregistrements d'une table1qui ne sont pas dans table2


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2003
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Comment retourner les enregistrements d'une table1qui ne sont pas dans table2
    bonjour

    J'ai deux tables de structure identique et j'aimerais retourner les enregistrements de la 1ère table qui ne sont pas dans la 2 ème:

    J'ai essayé les requêtes suivantes :

    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
     SELECT * 
    FROM TABLE_1
    WHERE EXISTS
      (SELECT * 
      FROM TABLE_2
      WHERE TABLE_2.MODIFDATE IS NULL);
     
    ou 
     
       SELECT * 
    FROM TABLE_1
    MINUS
    (SELECT * 
      FROM TABLE_2 
    );
    Mais aucune des deux ne retourne le résultat voulu qui devrait être
    4 Williams4 Bernie 2006-10-30 14:25:15
    5 Williams5 Bernie 2006-10-30 14:25:15
    Qu'est-ce qui manque à ces deux requêtes.

    Voici mon code.

    Merci d'avance

    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
     
    create table TABLE_1
    (
      NAME       VARCHAR2(50),
      SURNAME    VARCHAR2(50),
      MODIFDATE DATE
    )
     
    create table TABLE_2
    (
      NAME       VARCHAR2(50),
      SURNAME    VARCHAR2(50),
      MODIFDATE DATE
    )
     
    NAME SURNAME MODIFDATE
    1 Williams1 Bernie 2006-10-30 14:25:15
    2 Williams2 Bernie 2006-10-30 14:25:15
    3 Williams3 Bernie 2006-10-30 14:25:15
    4 Williams4 Bernie 2006-10-30 14:25:15
    5 Williams5 Bernie 2006-10-30 14:25:15
    6 Williams6 Bernie 2006-11-02 10:27:10
    7 Williams7 Bernie 2006-10-30 14:25:15
    8 Williams8 Bernie 2006-10-18 11:07:06
    9 Williams9 Bernie 2006-10-30 14:25:15
    10 Williams10 Bernie 2006-10-30 14:25:15
     
     
      NAME SURNAME MODIFDATE
    1 Williams1 Bernie 2006-10-30 14:25:15
    2 Williams2 Bernie 2006-10-30 14:25:15
    3 Williams3 Bernie 2006-10-30 14:25:22
    4 Williams6 Bernie 2006-10-30 14:25:22
    5 Williams7 Bernie 2006-10-30 14:25:22
    6 Williams8 Bernie 2006-10-30 14:25:22
    7 Williams9 Bernie 2006-10-30 14:25:22
    8 Williams10 Bernie 2006-10-30 14:25:22

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Une simple observation des donnée montre qu'il y a plus de 2 lignes qui sont dans la première sans être dans la 2ieme, ton minus devais donc te donner les bon resultats qui devaient être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    3 Williams3 Bernie 2006-10-30 14:25:15
    4 Williams4 Bernie 2006-10-30 14:25:15
    5 Williams5 Bernie 2006-10-30 14:25:15
    6 Williams6 Bernie 2006-11-02 10:27:10
    7 Williams7 Bernie 2006-10-30 14:25:15
    8 Williams8 Bernie 2006-10-18 11:07:06
    9 Williams9 Bernie 2006-10-30 14:25:15
    10 Williams10 Bernie 2006-10-30 14:25:15
    Quant à ta requête exists, elle n'a aucune jointure donc je vois pas trop en quoi ça se rapproche ton besoin...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2003
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J'aurais du être plus explicite.
    J'aurais voulu que seules les lignes
    4 Williams4 Bernie 2006-10-30 14:25:15
    5 Williams5 Bernie 2006-10-30 14:25:15

    me soient retournées, cad sans tenir compte de la date de modif

    Bien sûr il est possible de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT NAME , SURNAME FROM TABLE_1
      MINUS
    SELECT NAME , SURNAME FROM TABLE_2
    mais j'aurais voulu le faire sans spécifier les colonnes impliquées


    Citation Envoyé par remi4444
    Une simple observation des donnée montre qu'il y a plus de 2 lignes qui sont dans la première sans être dans la 2ieme, ton minus devais donc te donner les bon resultats qui devaient être:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    3 Williams3 Bernie 2006-10-30 14:25:15
    4 Williams4 Bernie 2006-10-30 14:25:15
    5 Williams5 Bernie 2006-10-30 14:25:15
    6 Williams6 Bernie 2006-11-02 10:27:10
    7 Williams7 Bernie 2006-10-30 14:25:15
    8 Williams8 Bernie 2006-10-18 11:07:06
    9 Williams9 Bernie 2006-10-30 14:25:15
    10 Williams10 Bernie 2006-10-30 14:25:15
    Quant à ta requête exists, elle n'a aucune jointure donc je vois pas trop en quoi ça se rapproche ton besoin...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    dans ton EXISTS il manque la jointure entre table1 et table2... et evite SELECT * dans le EXISTS

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par coralie88
    ...
    mais j'aurais voulu le faire sans spécifier les colonnes impliquées
    ...
    Le défaut avec Oracle comme avec beaucoup d'outils informatique, c'est qu'il faut lui indiquer ce qu'on veut faire (sauf word qui décide à notre place ce qu'on veut mais c'est une autre histoire )

    Tu n'a toujours pas été parfaitement explicite mais je suppose que les colonnes pour lesquelles tu considère que les lignes sont "équivalentes" sont dans le couple NAME/SURNAME.

    Plus sérieusement, la requête la plus naturelle question SQL c'est le not-exists. En fait il suffit juste de se formuler à sois meme ce que tu veux faire:

    "selectionner les lignes de la tables 1 pour lesquelles il n'existe pas de lignes dans la table 2 ayant le même couple NAME,SURNAME"

    Il faut rester simple, le sql c'est un peu la traduction en anglais de ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
      FROM TABLE_1
    WHERE NOT EXISTS
      (SELECT 1
        FROM TABLE_2
           WHERE TABLE_2.NAME = TABLE_1.NAME
                 AND TABLE_2.SURNAME = TABLE_1.SURNAME);

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/07/2014, 17h41
  2. Réponses: 0
    Dernier message: 08/04/2009, 01h55
  3. Comment vider les enregistrements d'une DataTable ?
    Par NeraOne dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/05/2007, 10h23
  4. Réponses: 3
    Dernier message: 12/10/2006, 13h23
  5. Réponses: 3
    Dernier message: 22/03/2006, 09h47

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