Condition avec calcul et jointure (SQL)

Klarann -  
Melooo Messages postés 1476 Statut Membre -
Bonjour,

voila j'aimerais faire la chose suivante, voici les tables concernées

categories : id,duree_vie,nom
documents : id,nom,creation,categorie,carton

je cherche à joindre les deux tables et à afficher la liste des cartons dont tous les documents sont arrivés à expiration (creation + duree_vie)

SELECT DISTINCT(carton)
FROM documents a, categories b
WHERE a.categorie = b.id
AND (a.creation + b.duree_vie) <= 2012 (année en cours)

cette requête m'affiche les cartons dont au moins un correspond à mon critère mais je cherche à faire en sorte d'afficher uniquement les cartons dont tous les documents correspondent aux critères.

En espérant avoir été clair, merci à tout ceux qui tenteront de me répondre
A voir également:

3 réponses

Melooo Messages postés 1476 Statut Membre 84
 
Salut,
Comprends pas la question
0
Klarann
 
en fait la requête de mon premier message affiche tous les cartons dont au moins un est arrivé à expiration, cependant je souhaite afficher les cartons dont tous les documents sont arrivé à expiration.

l'année d'expiration est calculé par la date de création + la durée de vie .

Exemple mon document est créé en 2005, la durée de vie de la catégorie est de 2 ans, l'année d'expiration est donc 2007.

Est ce que c'est plus clair?
0
Melooo Messages postés 1476 Statut Membre 84
 
Normalement ta requête devrait retourner tous les cartons qui sont arrivés à expiration... vérifie bien ta base de données pour voir si les résultats correspondent...
Rappel : Distinct permet d'enlever les doublons...
0
Klarann
 
non j'ai bien vérifier il m'affiche les cartons dont au moins une entrée correspond au critère et ce que je cherche c'est que tous correspondent
0
Melooo Messages postés 1476 Statut Membre 84
 
Je ne vois pas ton problème, dans ta requête tu n'a qu'un critère tu en as pas plusieurs...
0
Klarann
 
dans la requête que je donne par exemple j'ai trois cartons qu'on va appelé carton A,carton B et carton C. dans le carton A il y a deux documents qui sont arrivé à expiration ( année de création + durée de vie inférieure ou égale à l'année en cours) ,dans le carton B un des documents est arrivé à expiration et l'autre non. et dans le carton C aucun documents n'est arrivé à expiration.

Avec ma requête les cartons A et B apparaissent, cependant moi je voudrai sélectionner uniquement le carton A
0
Melooo Messages postés 1476 Statut Membre 84
 
Je pense que tu dois faire une requête imbriqué, ou tu compte le nombre de documents dans un carton, et le nombre de document expirés dans un carton
http://langagesql.free.fr/chap3d8.htm
0
Klarann
 
c'est ce que je pense aussi mais je n'arrive pas à voir comment
0
Melooo Messages postés 1476 Statut Membre 84
 
Euh ca devrait ressembler à quelque chose comme ca:
SELECT COUNT(documents.nom), carton
FROM documents a, categories b 
WHERE a.categorie = b.id
AND COUNT(documents.nom) = (SELECT COUNT(documents.nom) FROM documents a, categories b  WHERE  a.categorie = b.id AND (a.creation + b.duree_vie) <= 2012
0