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 !
« Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
- Confucius -
Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
Tous les cours Office
Solutions d'Entreprise
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
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
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