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

Bases de données Delphi Discussion :

[D7][BDE]Difference entre deux tables


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut [D7][BDE]Difference entre deux tables
    Bonjour,

    je voudrais faire une petite application qui permet de récupérer tous les enregistrements qui sont pas en commun entre deux table identique(la meme structure) ,c.a.d voir la difference entre les deux tables dans les deux sens.
    j'ai pensé a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT nom, prénom
    FROM Table1
    WHERE Table1.nom NOT IN (SELECT nom FROM Table2) AND Table1.prénom NOT IN (SELECT prénom FROM Table2);
     
    ou:
    SELECT nom, prénom
    FROM Table1
    EXCEPT
    SELECT nom, prénom
    FROM Table2;
    mais ici on recupere que les enregist de tabl1(table1-table2)
    j pensé a :
    (t1-t2)U(t2-t1)
    mais la requete n'a pas marché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT nom, prénom
    FROM Table1
    WHERE Table1.nom NOT IN (SELECT nom FROM Table2) AND Table1.prénom NOT IN (SELECT prénom FROM Table2)
    UNION
    SELECT nom, prénom
    FROM Table2
    WHERE Table2.nom NOT IN (SELECT nom FROM Table1) AND Table2.prénom NOT IN (SELECT prénom FROM Table1);
    j pensé aussi a l'intersection qui recupere les enreg commun ...mais

    existe il une autre méthode pour résoudre ce problème?

    MERCI D'AVANCE

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Points : 115
    Points
    115
    Par défaut Boulahbal
    veuilez réarticuler votre questions, car si vous voudriez faire une différence entre deux table la 2eme proposition est juste en utilisant la fonction EXCEPT.
    Le SQL offre trois opperateur ensemblistess UNION,INTERSECTION et EXCEPT
    quel est l'objectif de votre application peut être qu'on puissent détourné se programme.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    l'objectif de l'application est de verifier si les deux tables sont identique ou non .
    sinon (pas identique) voir les enregistrements qui sont déffernts entre les deux tables.
    si vous voudriez faire une différence entre deux table la 2eme proposition est juste en utilisant la fonction EXCEPT
    je travaille avec DBase ,je pense qu'il ne supporte pas ce type de requte(SQL2)
    peut etre que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while not tab1.eof do
    begin
    if not tab2.locate(...........) then {insert dans un stringgrid}
    tab1.next;
    end;
    while not tab2.eof do
    begin
    if not tab1.locate(.............) then {insert dans un stringgrid}
    tab2.next;
    end;

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    C'est ce que j'appelle une requête de non concordance.
    Tes requêtes peuvent s'écrire ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      select T1.NOM, T1.PRENOM
      from TABLE1 as T1 left outer join TABLE2 as T2
      on T1.NOM = T2.NOM and T1.PRENOM = T2.PRENOM
      where T2.NOM is NULL
    @+ Claudius

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    salut,

    select T1.NOM, T1.PRENOM
    from TABLE1 as T1 left outer join TABLE2 as T2
    on T1.NOM = T2.NOM and T1.PRENOM = T2.PRENOM
    where T2.NOM is NULL
    j essayer votre requete mais malheuresement elle n a pas marché,en effet elle recupere tous les enregistms.

    tu peut m'expliquer mieux votre requete
    surtout au niveau de
    where T2.NOM is NULL
    pourquoi NOM seule

    merci

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Je vais essayé d'être plus explicite en décortiquant la requête ligne par ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      select T1.NOM, T1.PRENOM
    Ici on demande de n'afficher que le nom et le prénom de la table T1. Ca c'est simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      from TABLE1 as T1 left outer join TABLE2 as T2
      on T1.NOM = T2.NOM and T1.PRENOM = T2.PRENOM
    Ici on définit la jointure entre les 2 tables T1 et T2 (Table1 et Table2). Cette jointure étant basée sur les NOMS et PRENOMS dans les 2 tables.
    Left Outer Join précise que l'on veux renvoyer TOUS les enregistrements de T1 qu'il y ait une concordance avec T2 ou non.
    Si il n'y a pas de concordance les T2.NOM et T2.PRENOM seront à NULL.

    Maintenant puisque tu souhaites renvoyer uniquement les enregistrements de T1 qui sont absent de T2, il suffit d'ajouter la condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      where T2.NOM is NULL
    j'aurais pu écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      where (T2.NOM is NULL) and (T2.PRENOM is NULL)
    mais si T2.NOM est NULL alors T2.PRENOM sera oligatoirement NULL. Donc pas vraiment besoin de multiplier les conditions.

    Donc au final, cette requête est censé te renvoyer tous les NOM et PRENOM de T1 qui sont absent de T2.

    @+

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    salut,

    votre explication est tres claire
    en plus votre requete est tres bien optimisé

    merci beaucoup

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

Discussions similaires

  1. [MySQL] la difference entre deux tables
    Par ouali324 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/12/2011, 16h05
  2. Difference de données entre deux tables
    Par gianffranco dans le forum SQL
    Réponses: 3
    Dernier message: 10/06/2011, 15h59
  3. Réponses: 7
    Dernier message: 17/08/2010, 16h12
  4. Chercher des differences entre deux tables
    Par pierre24 dans le forum SAS Base
    Réponses: 2
    Dernier message: 30/07/2008, 14h56
  5. comment trouve la difference dans un champ commun entre deux tables
    Par pmorth dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/02/2008, 06h04

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