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

Langage SQL Discussion :

Récupérer les valeurs d'une table qui n'existent pas dans une autre


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut Récupérer les valeurs d'une table qui n'existent pas dans une autre
    Bonjour,

    Je souhaiterai lister les valeurs d'une table qui ne sont pas présentes dans une autre table. La comparaison s'effectue sur des champs en clés composées

    J'utilise une fonction avec les paramètres :
    table_1 = le nom de la table à comparer
    champs_table1 = noms des champs clés séparés par des virgules
    table_2 = le nom de la table comparée
    champs_table2 = noms des champs clés séparés par des virgules

    Les champs_table1 et champs_table2 n'ont pas les mêmes noms mais sont organisés dans le même ordre de comparaison.

    Je n'arrive pas à avoir une requête correcte. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fonction (table_1 ; champs_table1 ; table_2 ; champs_table2) {
      SELECT $champs_table1
      FROM   $table_1
      WHERE NOT EXISTS (
         SELECT $table_champs_table2
         FROM   $table2);
    finfonction;
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Utilisez plutôt MINUS / EXCEPT selon votre SGBD.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut
    Un petit exemple avec MINUS / EXCEPT ne serait pas de refus.
    Je ne vois pas trop comment faire.

    Merci

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT $champs_table1
    FROM   $table_1
    MINUS -- ou EXCEPT
    SELECT $champs_table2
    FROM   $table2;

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT distinct $champs_table1
    FROM $Table1 LEFT JOIN $table2 ON $champs_table1 = $champs_table2
    WHERE $champs_table2) Is Null;


    la seconde est plus lente en terme de temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      SELECT $champs_table1
      FROM   $table_1
      WHERE $champs_table1 NOT IN (
         SELECT $champs_table2
         FROM   $table2);
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 376
    Points : 199
    Points
    199
    Par défaut
    J'ai testé les codes SQL et le "EXECPT" fonctionne très bien.

    Il suffit juste de garder l'ordre les champs dans l'ordre de comparaison entre les 2 tables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT $champ1_table1 , $champ2_table1 , $champ3_table1
    FROM   $table_1
    EXCEPT
    SELECT $champ1_table2 , $champ2_table2 , $champ3_table2
    FROM   $table2;
    Merci à tous les deux

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

Discussions similaires

  1. Lister les enregistrements qui ne sont pas dans une table
    Par toss.net dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2010, 11h25
  2. Réponses: 2
    Dernier message: 29/09/2009, 15h33
  3. Une table.. qui ne ressemble pas a une table ?
    Par zevince dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 23/04/2007, 11h14
  4. Réponses: 1
    Dernier message: 21/12/2006, 11h17
  5. Réponses: 10
    Dernier message: 15/12/2006, 07h34

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