Retour au sommaire du Travail Pratique Access
6.3 Requête sur 2 versions d'une même table ReqMêmeOrdrePassage
On va se poser maintenant la question suivante y-aurait-il
des séries dans lesquelles deux concurrents ont le même ordre de passage ? Si
tel était le cas, il s'agirait d'une incohérence qu'il convient de supprimer.
Pour s'en rendre compte, il faudrait regarder la table Regrouper, et pour chaque
Dossard, vérifier s'il n'y a pas, dans le reste de la table, un autre Dossard
pour lequel Ordre_Pass est le même. Or que fait une requête SQL entre deux
tables ? Elle effectue un parcours de chaque ligne d'une table, avec pour chaque
ligne de cette table une recherche de correspondance avec toutes les lignes
successives de l'autre table. Pour notre problème, cela veut dire qu'il nous
faut une version de la table Regrouper, dans laquelle on inspecte une à une
chaque ligne, et pour un Dossard donné, on doit rechercher dans une deuxième
version de cette table un autre Dossard qui, pour la même série aurait le même
ordre de passage.
Nous avons donc besoin de deux versions de la table Regrouper. Créons donc cette
nouvelle requête par le bouton "Nouveau", en mode Création, ajoutons deux fois
la requête Regrouper. Ces tables portent le nom Regrouper et Regrouper_1. On va
les rebaptiser respectivement R1 et R2, comme dans la figure qui suit :

Pour ce faire, on se met en Mode SQL et on édite la table de la
façon suivante :
SELECT *
FROM Regrouper AS R1, Regrouper AS R2;
En se mettant ensuite en Mode Création, on obtient le
résultat escompté. Il nous faut maintenant exprimer les termes de la recherche
entre les deux tables : on veut la même série et le même ordre de passage. Il
suffit pour cela de "tirer" à la souris le lien entre les champs Num_Série et
Ordre_Pass comme le montre la figure suivante :

Ensuite on indique les champs souhaités (Num-Série, Dossard et
Ordre_Pass pris dans R1), en terminant par le Critère sur Dossard <>R2.Dossard
exprimant le fait que l'on cherche 2 Dossards différents dans la même série avec
le même ordre de passage. On devrait obtenir un résultat de la forme (attention,
rééditer la version SQL pour enlever le "*" derrière SELECT que l'on avait
ajouté) :

On pourra regarder la requête SQL qui en découle :
SELECT R1.Num_Série, R1.Dossard,
R1.Ordre_Pass
FROM Regrouper AS R1 INNER JOIN Regrouper AS R2 ON (R1.Num_Série =
R2.Num_Série) AND (R1.Ordre_Pass = R2.Ordre_Pass)
WHERE (((R1.Dossard)<>[R2].[Dossard]))
ORDER BY R1.Num_Série, R1.Dossard;
Exercice facultatif :
ReqDans2SériesDeLaMêmeEpreuve
On pourra s'entraîner sur un problème similaire, un peu plus
complexe. Il s'agit de déterminer les concurrents qui seraient regroupés dans
deux séries correspondant à la même épreuve. Encore une contrainte d'intégrité
violée si une telle incohérence existe dans notre base de données… Ce qui est
d'ailleurs le cas si l'on se réfère au résultat que l'on obtient :

Retour au sommaire du Travail Pratique Access