ACC2000 : Jointure externe avec WHERE clause renvoie les enregistrements inattendus

Traductions disponibles Traductions disponibles
Numéro d'article: 208880 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Modéré : Nécessite macro base, de codage et les compétences de l'interopérabilité.

Cet article s'applique uniquement à une base de données Microsoft Access (.mdb).

Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsque vous exécutez une requête basée sur deux tables (dans cet exemple, tables A et B) avec une jointure externe pour inclure tous les enregistrements de la table A et que vous appliquez une clause WHERE à la table B, vous vous attendez à voir tous les enregistrements de table A et les enregistrements de table B qui remplissent les conditions de la clause WHERE. Au lieu de cela, uniquement les enregistrements de la table B qui satisfont la clause WHERE et ont une correspondante valeur dans table A sont renvoyée.

Cause

Lorsque vous exécutez la requête, la jointure externe est réalisée en premier, créer tous les enregistrements à partir de table a. Ensuite, la clause WHERE de la table B est appliquée à tous les enregistrements, en éliminant les enregistrements de la requête. Le jeu de résultats ne contient pas tous les enregistrements de la table A, mais contient uniquement celles pour lesquelles la condition est remplie pour la table b.

Contrairement à Microsoft Access, SQL Server traite actuellement WHERE avant la jointure. Cela est dû au fait que cette fonctionnalité a été implémentée avant la norme ANSI SQL-92. Avant, ne produite tout aucune spécification de jointure externe. Par conséquent, la même requête peut retourner des résultats différents par rapport à SQL Server, selon que vous utilisez une requête sélection ou une requête SQL directe (auquel cas SQL Server gère la requête et renvoie simplement les résultats.)

Résolution

Si vous souhaitez renvoyer tous les enregistrements de la table, vous pouvez utiliser deux requêtes. La première requête doit s'appliquer à la clause WHERE à la table B, et la seconde requête doit combiner table A avec la première requête pour effectuer la jointure externe.

Statut

Ce type de traitement de requête est conforme à la spécification ANSI SQL 92.

Plus d'informations

Étapes pour renvoyer l'objet Recordset prévu

  1. Démarrez Microsoft Access et ouvrez la base de données Comptoir.mdb.
  2. Créez une nouvelle requête basée sur la table produits.
  3. Faites glisser les champs CategoryID et ProductName dans la liste de champ de produits à la grille de requête.
  4. Dans la ligne critères pour le champ ProductName, tapez comme A *.
  5. Enregistrez la requête sous Requête1 et fermez-le.
  6. Créez une nouvelle requête basée sur la table catégories et de la requête Requête1.
  7. Faites glisser le champ NomCatégorie de la liste de champ de catégories vers la grille.
  8. Faites glisser le champ ProductName dans la liste de champ Requête1 vers la grille.
  9. Double-cliquez sur la ligne de jointure. Dans la boîte de Propriétés de la jointure, cliquez sur inclure tous les enregistrements de «Catégories»... "option de bouton, puis cliquez sur OK.
  10. Exécutez la requête.

    Notez que tous les enregistrements de la table catégories sont renvoyés, avec le champ NomProduit renseigné pour les enregistrements et un enregistrement correspondant dans la table produits.

Procédure pour reproduire le problème

Attention : Si vous suivez les étapes de cet exemple, vous modifier la base de données Comptoir.mdb. Vous souhaiterez peut-être sauvegarder le fichier Comptoir.mdb et suivre ces étapes sur une copie de la base de données.

  1. Démarrez Microsoft Access et ouvrez la base de données Comptoir.mdb.
  2. Créez une nouvelle requête basée sur les catégories et les tables Products. Les deux tables doivent être jointes sur le champ CategoryID.
  3. Double-cliquez sur la ligne de jointure entre les listes de champs de table de deux. Dans la boîte de Propriétés de la jointure, activez la case d'option inclure tous les enregistrements de «Catégories»..., puis cliquez sur OK.
  4. Faites glisser le champ NomCatégorie de la liste de champ de catégories à la première colonne de la grille de requête.
  5. Faites glisser le champ ProductName dans la liste de champ de produits à la deuxième colonne de la grille de requête.
  6. Dans la ligne critères de la colonne nom du produit, tapez comme A *.
  7. Exécutez la requête.

    Notez que pas tous les enregistrements de la table catégories sont renvoyés. Au lieu de cela, les enregistrements selon un nom de produit commençant par la lettre «A» sont retournées.

Références

Pour plus d'informations sur les relations, cliquez sur Aide sur Microsoft Access dans le menu aide, tapez travailler avec les relations dans le Compagnon Office ou l'aide intuitive et puis cliquez sur Rechercher pour afficher les rubriques correspondantes.

Propriétés

Numéro d'article: 208880 - Dernière mise à jour: lundi 3 février 2014 - Version: 1.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 2000 Standard Edition
Mots-clés : 
kbnosurvey kbarchive kbmt kbprb KB208880 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 208880
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com