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

Requêtes et SQL. Discussion :

chercher les éléments d'une table B qui ne sont pas dans la table A


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut chercher les éléments d'une table B qui ne sont pas dans la table A
    Bonjour,
    J'ai deux tables t_A et t_B avec entre deux champs communs: magasin, article.
    Dans la table t_B, il y a des articles qui sont dans certains magasins, donc des enregistrements [magasin, article, ...] que l'on ne trouve pas dans la table t_A.

    Je voudrais récupérer ces éléments manquants. J'ai créé une requette avec ces deux tables fait un lien (INNER JOIN) entre les deux via le champ "magasin", puis j'essaie de récupérer les champs de t_B qui ne sont pas dans t_A avec cette requette:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t_A.SHOP, t_A.ITEM
    FROM t_A INNER JOIN Raw_legacy ON t_A.SHOP = t_B.AC_NSHOPID
    WHERE  t_A.ITEM not in (SELECT t_B.ITEM FROM t_B)
    Le résultat: il charge beaucoup de données et je crois qu'il met autant d'articles de la table B avec les articles de la table A, bref, il met des doublons. Il ne fait pas ce que je voudrais.

    Pensant que la liaison posait problème, j'ai réécrit la requette de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t_A.SHOP, t_A.ITEM
    FROM t_A
    WHERE  t_A.ITEM not in (SELECT t_B.ITEM FROM t_B)
    Là aussi, il me charge beaucoup trop de données que j'attendais.

    Est-ce que qqn connaît la procédure dans ce genre de situation?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Une petite lecture de cet article http://mhubiche.developpez.com/Access/tutoJointures/ devrait te résoudre ton problème, regardes du coté des jointures gauches et droites.


    Starec

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Pense à l'instruction LEFT JOIN ou RIGHT JOIN

  4. #4
    Membre régulier

    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 104
    Points
    104
    Par défaut
    J'avais déjà appliqué les règles de base de jointure.
    J'ai mis deux jointures entre les deux tables.
    Une première jointure au niveau du champ "magasin".
    Une deuxième jointure gauche au niveau du champ "article" de manière à récupérer tous les articles
    de la table A qui ne se trouvent dans la table B.

    Mais il y a un message d'erreur. Il me dit de faire en deux temps. D'abord avec la première jointure.
    Ensuite avec la deuxième jointure.

    J'ai essayé de faire la requette avec une seule jointure au niveau de magasin mais lorsque je
    veux visualiser les données, ça rame énormément. J'ai coupé Access au bout de plusieurs minutes.

    Je suis bloqué à ce niveau.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    as-tu essayé ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t_a.SHOP, t_a.item
    FROM t_a LEFT JOIN t_b ON (t_a.item = t_b.item) AND (t_a.shop = t_b.AC_NSHOPID)
    WHERE t_b.Shop Is Null;

  6. #6
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bonjour,

    tu nous dis :

    Une première jointure au niveau du champ "magasin".
    Une deuxième jointure gauche au niveau du champ "article" de manière à récupérer tous les articles
    de la table A qui ne se trouvent dans la table B.
    Je pense qu'il faut que tes deux jointures soient identiques entre les deux tables
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

Discussions similaires

  1. [MySQL] Sélectionnés tous ceux qui ne sont pas dans la table
    Par landrytony dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/05/2011, 20h08
  2. [MySQL] extraire des données d'1 table t1 qui n'existent pas dans la table t2
    Par z_ahlam dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/11/2010, 18h07
  3. 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
  4. Réponses: 10
    Dernier message: 15/12/2006, 07h34
  5. Réponses: 4
    Dernier message: 02/06/2006, 12h03

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