Comment éviter les doublons dans une requête

Le
Freeman
Bonjour,
Comment éviter les doublons dans une requête ?

Je souhaite convoquer des adhérents ayant été membres ces trois
dernières années:

- une table adhérents
Avec un Champ : Nom

- une table adhésion
Avec un Champ années

Dans les champs -Nom certains ont été membres tous les ans et d'autres non.
..
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre chose
car ça ne fonctionne pas.
D'avance merci !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
P3859
Le #23121611
Le 12/02/2011 23:44, Freeman a écrit :
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières années:

- une table adhérents
Avec un Champ : Nom

- une table adhésion
Avec un Champ années

Dans les champs -Nom certains ont été membres tous les ans et d'autres non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre chose
car ça ne fonctionne pas.
D'avance merci !




bonjour,
tu as essayé : http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm

l'option "distinct"
Post Scriptum
Le #23122141
"P3859" 4d57b357$0$11586$
bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm

l'option "distinct"



Bonjour,
je viens enfin de trouver, il fallait écrire MAX dans le champs années.
Merci pour le tutoriel .

DISTINCT se met tout seul en SQL en mettant "oui" dans la propriété de la
requête Valeur distinct
Post Scriptum
Le #23122541
"P3859" 4d57b357$0$11586$
Le 12/02/2011 23:44, Freeman a écrit :
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:

- une table adhérents
Avec un Champ : Nom

- une table adhésion
Avec un Champ années

Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !




bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm

l'option "distinct"



Comme ça :
http://cjoint.com/?0cnreLyNSdK
Michel__D
Le #23122571
Bonjour,

Post Scriptum a écrit :
"P3859" 4d57b357$0$11586$
Le 12/02/2011 23:44, Freeman a écrit :
Bonjour,
Comment éviter les doublons dans une requête ?
........................................................................
Je souhaite convoquer des adhérents ayant été membres ces trois dernières
années:

- une table adhérents
Avec un Champ : Nom

- une table adhésion
Avec un Champ années

Dans les champs -Nom certains ont été membres tous les ans et d'autres
non.
.............................................................................
Dans ma requête j'ai demandé regroupement, mais j'ai du oublié autre
chose
car ça ne fonctionne pas.
D'avance merci !




bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm

l'option "distinct"



Comme ça :
http://cjoint.com/?0cnreLyNSdK




J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas besoin de "DISTINCT".
Freeman
Le #23122651
Le 13/02/2011 17:17, Michel__D a écrit :

bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm

l'option "distinct"



Comme ça :
http://cjoint.com/?0cnreLyNSdK




J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".



Tu sais je ne suis pas un Pro, sinon je ne poserai pas ce genre de question.
Avant j'allais me faire aider sur les forum Microsoft, mais il ne
doivent plus exister ?

Comme ça :

SELECT DISTINCT adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité, Max(adhésion.année) AS MaxDeannée
FROM adhérents INNER JOIN adhésion ON adhérents.refadherent =
adhésion.refadherent
GROUP BY adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité
HAVING (((adhérents.retraité)=True) AND ((Max(adhésion.année)) 09)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 10)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 11))
ORDER BY adhérents.Nom;
Michel__D
Le #23122701
Re,

Freeman a écrit :
Le 13/02/2011 17:17, Michel__D a écrit :

bonjour,
tu as essayé :
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/chap19.htm

l'option "distinct"



Comme ça :
http://cjoint.com/?0cnreLyNSdK




J'aimerais bien voir le SQL de la requête car je pense que tu n'as pas
besoin de "DISTINCT".



Tu sais je ne suis pas un Pro, sinon je ne poserai pas ce genre de
question.
Avant j'allais me faire aider sur les forum Microsoft, mais il ne
doivent plus exister ?

Comme ça :

SELECT DISTINCT adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité, Max(adhésion.année) AS MaxDeannée
FROM adhérents INNER JOIN adhésion ON adhérents.refadherent =
adhésion.refadherent
GROUP BY adhérents.Titre, adhérents.Prénom, adhérents.Nom,
adhérents.Adresse1, adhérents.Adresse2, adhérents.[Code Postal],
adhérents.Ville, adhérents.retraité
HAVING (((adhérents.retraité)=True) AND ((Max(adhésion.année)) 09)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 10)) OR
(((adhérents.retraité)=True) AND ((Max(adhésion.année)) 11))
ORDER BY adhérents.Nom;




Normalement le SQL suivant devrait fournir le même résultat :

SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent = T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND Max(T2.[année])< 11
ORDER BY T1.Nom;
db
Le #23122831
Le 13/02/2011 18:35, Michel__D a écrit :

Normalement le SQL suivant devrait fournir le même résultat :

SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent > T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;




Cela dit, s'il s'agit juste de connaître le nom des adhérents d'au moins
une des trois dernières années, on peut écrire :

SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
ORDER BY T1.Nom;

S'il s'agit par contre de connaître le nom des gens qui ont été
adhérents les trois dernières années (qui ont payé les trois dernières
cotisations, quoi), on écrira plutôt :

SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[Année])=3
ORDER BY T1.Nom;


db
Post Scriptum
Le #23123191
"db" 4d581be0$0$11042$
Le 13/02/2011 18:35, Michel__D a écrit :

Normalement le SQL suivant devrait fournir le même résultat :

SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2, T1.[Code
Postal], T1.Ville, T1.[retraité], Max(T2.[année]) AS MaxDeannée
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2 ON T1.refadherent >> T2.refadherent
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING T1.[retraité]=True AND Max(T2.[année])> 09 AND
Max(T2.[année])< 11
ORDER BY T1.Nom;




Cela dit, s'il s'agit juste de connaître le nom des adhérents d'au moins
une des trois dernières années, on peut écrire :

SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
ORDER BY T1.Nom;

S'il s'agit par contre de connaître le nom des gens qui ont été adhérents
les trois dernières années (qui ont payé les trois dernières cotisations,
quoi), on écrira plutôt :

SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année])< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[Année])=3
ORDER BY T1.Nom;



J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.
db
Le #23123281
Le 13/02/2011 20:36, Post Scriptum a écrit :


J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.




Effectivement, il y avait une parenthèse en trop dans chacune des requêtes.
Mille excuses.

db

SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
ORDER BY T1.Nom;


SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[année])=3
ORDER BY T1.Nom;
Freeman
Le #23123481
Le 13/02/2011 21:09, db a écrit :
Le 13/02/2011 20:36, Post Scriptum a écrit :


J'ai essayé les deux, mais elles me donnent un message d'erreur.
L'important c'est que la première fonctionne avec la condition MAX.
Merci à tout les deux.




Effectivement, il y avait une parenthèse en trop dans chacune des requêtes.
Mille excuses.

db

SELECT DISTINCT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
ORDER BY T1.Nom;


SELECT T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
FROM [adhérents] AS T1 INNER JOIN [adhésion] AS T2
ON T1.refadherent = T2.refadherent
WHERE T1.[retraité]=True AND T2.[année]> 09 AND
T2.[année]< 11
GROUP BY T1.Titre, T1.[Prénom], T1.Nom, T1.Adresse1, T1.Adresse2,
T1.[Code Postal], T1.Ville, T1.[retraité]
HAVING Count(T2.[année])=3
ORDER BY T1.Nom;



J'ai essayé la première, ça fonctionne, que va m'apporter la seconde ?
Merci.
Il a trouvé un espace en trop à [T1Code Postal]
J'ai rectifié tout seul comme un grand.
Si j'enlevais MAX ça marcherait quand même?
Cette requête n'est pas un appelle à coti, mais une information a faire
pour fêter un anniversaire.
Publicité
Poster une réponse
Anonyme