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ésultat de deux tables croisées


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 55
    Points
    55
    Par défaut Résultat de deux tables croisées
    Bonjour les amis,

    Je voudrai faire un croisement entre deux tables pouvant contenir des informations identiques comme elles peuvent en contenir d'autres différentes, ces tables possèdent la même structure, ci-dessous un exemple de ces deux tables:
    --------------------------------------------------------------------
    table1:
    |nom| |tel| |adresse| |date_naiss| |activite|
    marc 555555 paris 01/01/1980 informaticien
    alex 666666 paris 02/01/1980 mécanicien
    brad 444444 marseille 03/01/1980 electronicien

    table2:
    |nom| |tel| |adresse| |date_naiss| |activite|
    marc 555555 paris 01/01/1980 informaticien
    alex 666666 paris 02/01/1980 mécanicien
    alain 777777 marseille 03/01/1980 historien
    brad 111111 toulouse 03/01/1980 historien
    ---------------------------------------------------------------------
    Mon besoin est de croiser les deux tables de manière à faire ressortir de la table2 tous les enregistrements qui n'existent pas dans la table1 ce qui dans mon cas fait ressortir les lignes 3 et 4 de la table2, bien sûr le croisement doit prendre en considération l'exactitude de toutes les données sur l'ensemble des lignes, là j'avoue que je bloque un peu car y a plusieurs point communs et donc comment faire le croisement et en prenant quels paramètres de croisement ?

    Merci de m'aider là-dessus.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM table2 t2 
    WHERE NOT EXISTS (
        SELECT * FROM table1 t1 
            WHERE t2.nom = t1.nom 
              AND t2.tel = t1.tel 
              AND t2.adresse = t1.adresse 
              AND t2.date_naiss = t1.date_naiss 
              AND t2.activite = t1.activite
    )

  3. #3
    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
    Il suffit de faire un EXCEPT / MINUS selon votre SGBD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select nom, tel, adresse, date_naiss, activite
      from table2
    except
    select nom, tel, adresse, date_naiss, activite
      from table1;

  4. #4
    Membre du Club Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Salut les amis;

    Et merci pour ces réponses

    je viens de tester les deux requêtes Sql en commençant par celle de shaoling, certe elle donne le résultat voulu mais elle est très lourde et son execution peux prendre un bon moment pour aboutir si les tables à interroger contiennent plusieurs miliers de lignes, par contre celle de Waldar fait l'affaire avec utilisation de l'operateur Minus qui se solde par une execution rapide donnant le bon resultat egalement:

    Citation Envoyé par Waldar Voir le message
    Il suffit de faire un EXCEPT / MINUS selon votre SGBD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select nom, tel, adresse, date_naiss, activite
      from table2
    minus
    select nom, tel, adresse, date_naiss, activite
      from table1;
    maintenant la requête ci-dessus génère une liste de données de plusieurs lignes, comment dois-je m'y prendre pour faire un Count sur cette liste? c'est à dire afficher un chiffre en reference au nombres de lignes trouvé

    merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Points : 80
    Points
    80
    Par défaut
    Peut-être un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COUNT(*)
    FROM (SELECT nom, tel, adresse, date_naiss, activite
          FROM table2
          minus
          SELECT nom, tel, adresse, date_naiss, activite
          FROM table1) tmp;

  6. #6
    Membre du Club Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Resalut les amis;

    c'est ok, en fait c'est très simple de faire un Count sur cette requête, j'ai tout simplement créer une vue appelé test_v :

    create or replace view test_v as
    select nom, tel, adresse, date_naiss, activite
    from table2
    minus
    select nom, tel, adresse, date_naiss, activite
    from table1;
    après ça un simple select count(*) from test_v
    fait l'affaire

    merci à tous

  7. #7
    Membre du Club Avatar de mohe27
    Inscrit en
    Février 2007
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Salut shaoling,

    ta solution fonctionne également

    merci à toi

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/06/2009, 22h38
  2. Réponses: 0
    Dernier message: 18/05/2009, 16h15
  3. Réponses: 2
    Dernier message: 13/03/2008, 16h08
  4. [MySQL] afficher le résultat de deux tables sur un même tableau
    Par gpsevasion dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2007, 09h38
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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