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 :

2 tables; requête : retourner différences entre les 2


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Points : 21
    Points
    21
    Par défaut 2 tables; requête : retourner différences entre les 2
    hello

    Je cherche une requête mais n'étant pas assez exercé en sql je sature là et n'arrive pas au bon résultat.

    voila ce que je recherche.

    J'ai 2 tables, dans chacune d'elles les champs id et login
    table1 : id, login
    table2 : id, login

    si les données des 2 tables sont correctes elles doivent avoir les mêmes données c'est à dire que pour chaque id, login de table1 correspondent les même id, login de table2.

    Ma requête consiste donc à trouver les id,login de table2 n'étant pas dans table1 (ce qui en fait n'arrivera pas mais cette requête me servira à confirmer l'intégrité des données dans les 2 tables).

    par exemple prenons :

    Table1
    id login
    1 zorro
    2 coucou

    Table2
    id login
    1 zorro
    2 coucou
    3 toto

    or toto n'étant pas dans Table 1, la requête doit retourner le couple unique (3,toto) de table 2.

    pas évident... :

    voila merci pour votre aide.

  2. #2
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Salut

    J'aimerais d'abord savoir sur quel genre de base de données tu travailles ?

    @++
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Janvier 2003
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur avant-vente

    Informations forums :
    Inscription : Janvier 2003
    Messages : 124
    Points : 103
    Points
    103
    Par défaut
    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from table2 where NOT EXISTS
    (select * from table1)

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM MaTable1
    EXCEPT
    SELECT * 
    FROM MaTable2
    C'est tout !

    A lire sur le sujet :
    http://sqlpro.developpez.com/SQL_AZ_...ENSEMBLEexcept

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    ok merci pour vos réponses je vais tester ça et vous tiendrai au courant.

    En effet ça à l'air beaucoup plus simple qd on connait davantage la syntaxe.

    je tentais de faire avec des jointures compliquées et qui ne marchaient
    pas.

    a+

  6. #6
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par axel-erator
    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from table2 where NOT EXISTS
    (select * from table1)
    il manque le lien entre les deux tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM table2
    WHERE id NOT IN (SELECT id FROM table1)
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SQLpro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM MaTable1
    EXCEPT
    SELECT * 
    FROM MaTable2
    A +
    Si ça marche pas, remplace EXCEPT par MINUS (ça dépend de la base)
    show time !!!

  8. #8
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    C'est ce que j'ai demandé depuis le début : quelle est la base de données utilisée ?
    Oracle ? Sql Serveur ? MySQL ? "Access" ? Paradox ? ...
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  9. #9
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par Vow
    C'est ce que j'ai demandé depuis le début : quelle est la base de données utilisée ?
    Oracle ? Sql Serveur ? MySQL ? "Access" ? Paradox ? ...
    C'est pour cela que j'ai proposé une solution plus transportable.
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  10. #10
    Vow
    Vow est déconnecté
    Membre expérimenté Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Points : 1 584
    Points
    1 584
    Par défaut
    Oui en effet.
    Désolé
    Il vaut mieux prêter à sourire que donner à réfléchir.

    Je ne réponds pas aux problèmes techniques par MP (il y a les FAQs et le forum pour ça)
    (ex-Responsable Windows/Info Gen&Hardware, loup-garou à ses heures)

    Cliquez sur le bouton si votre problème a trouvé une solution.
    N'oubliez pas non plus de donner la réponse si vous l'avez trouvée !

    Je mords donc je suis
    Une fine lame pour te soutenir

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    bonjour,

    je reviens un peu tardivement sur ce sujet. Je viens de m'y replonger seulement aujourd'hui et j'ai essayé vos solutions.

    je suis sous Mysql

    et je n'arrive pas à exécuter vos requêtes.
    j'ai tenté celles ci sous php

    $req = "SELECT id,login FROM $table1 MINUS/EXPECT SELECT id,login FROM $table2";

    minus ou expect ne marche pas sous mysql peut être ?

    $req = "SELECT id,login FROM $table1 WHERE id,login NOT IN (SELECT id,login FROM $table2)";

    merci

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Est ce que la deuxième (avec le NOT IN) a fonctionné ?

    Sinon le mot clé c'est EXCEPT pas EXPECT.. et je crois que c'est celui là le plus proche du standard SQL.
    show time !!!

  13. #13
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    MySQL ne supporte pas les requete ensemblistes et les sous requetes avant la version 4.qqchose. donc les solution proposée plus haut, bien qu'elles soient juste dans l'absolu ne fonctionnent pas sous MySQL.
    tu devrait y arriver en passant par une table temporaire peut être, on a a déjà souvent parlé sur ce forum.

    ou peut être (pour faire un NOT IN de façon contournée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Table2.*
    FROM Table2
    LEFT JOIN Table1 ON Table1.num=Table2.Num
    Where Table1.Num IS NULL;
    bon courage

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    flint> Est ce que la deuxième (avec le NOT IN) a fonctionné ?

    elle n'a pas fonctionné, le mot EXCEPT non plus.

    buffyann> ton code a marché (avec ses petites pattes )

    peux tu me dire ce que fait le "LEFT JOIN ... ON" dans la requête ?

    merci à tous pour l'aide

  15. #15
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 109
    Points : 111
    Points
    111
    Par défaut
    Le LEFT JOIN, c'est une semi jointure gauche(=jointure externe), c'est à dire qu'on prend tous les enregistrements de la table 1 (même ceux qui ne satisfont pas la condition de jointure table1.num=table2.num donc même ceuw qui n'existent pas dans table2) puis on y ajoute ceux de table2 qui, eux, satifont la condition de jointure.

    pour plus d'infos sur la jointure gauche, aller voir le site de SQLPro qui explique ça beaucoup mieux que moi avec des exemples...
    http://sqlpro.developpez.com/SQL_AZ_...#JOIN_externes

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    ok merci pour les infos

    ca m'a bien arrangé d'avoir cette requête

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

Discussions similaires

  1. [WD17] calculer la différence entre les lignes d'une table
    Par cigalou84 dans le forum WinDev
    Réponses: 4
    Dernier message: 23/12/2013, 15h28
  2. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  3. Réponses: 5
    Dernier message: 06/06/2006, 14h12
  4. fopen -> différences entres les types d'ouvertur
    Par Patrick PETIT dans le forum C
    Réponses: 10
    Dernier message: 01/06/2003, 18h19
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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