Slt à tous meilleurs voeux 2009 :-).
En ce début d'année je souhaite faire une requête qui me permette de sortir une liste de personnes qui ne se trouve ni à la fois dans la 1ère ni dans la 2ème table.
Est il possible et de quelle façons svp merci.
Slt à tous meilleurs voeux 2009 :-).
En ce début d'année je souhaite faire une requête qui me permette de sortir une liste de personnes qui ne se trouve ni à la fois dans la 1ère ni dans la 2ème table.
Est il possible et de quelle façons svp merci.
Bonjour,
Dans la simplicité je dirais avec une sous requête et l'utilisation du prédicat "NOT EXISTS" !
Sans le SGBD, ni la description des tables ça va être plus dur de t'aider !
cf les règles !
![]()
Merci.
en fait je veux savoir si une personnes n'a pas acheté des pommes par exemple depuis 2 ans.
table des personnes avec id
et tables des achats avec date des achats.
Décomposons le problème...
Déjà on va supposer que la base est correctement modéliser et qu'il y a en plus une table des produits.
1) Il y a des personnes qui n'ont jamais acheté de pommes.
2) Il y a des personnes qui ont acheté des pommes dont il faut connaître la date du dernier achat de pommes et vérifier si celle-ci est inférieure à aujourd'hui - 2 ans.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT p.P_Id, p.P_Nom FROM personnes p INNER JOIN achats a ON p.P_Id = a.A_IdPersonne INNER JOIN produits pr ON a.A_IdProduit = pr.PR_id WHERE pr.PR_NomProduit = 'pommes' GROUP BY p.P_Id, p.P_Nom HAVING COUNT(*) = 0
On est peut-être pas à un jour près s'il y a une année bissextile dans les deux ans ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT p.P_Id, p.P_Nom FROM personnes p INNER JOIN achats a ON p.P_Id = a.A_IdPersonne INNER JOIN produits pr ON a.A_IdProduit = pr.PR_id WHERE pr.PR_NomProduit = 'pommes' GROUP BY p.P_Id, p.P_Nom HAVING DATEDIFF(CURRENT_DATE, MAX(a.A_DateAchat)) > 730
3) Il n'y a plus qu'à réunir les deux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT p.P_Id, p.P_Nom FROM personnes p INNER JOIN achats a ON p.P_Id = a.A_IdPersonne INNER JOIN produits pr ON a.A_IdProduit = pr.PR_id WHERE pr.PR_NomProduit = 'pommes' GROUP BY p.P_Id, p.P_Nom HAVING COUNT(*) = 0 OR DATEDIFF(CURRENT_DATE, MAX(a.A_DateAchat)) > 730
Merci pour vos réponses je vais tester et si besoin reviendrai vers vous :-)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager