Exclusion total d'enregistrements en SQL
Résolu/Fermé
Dacobah
Messages postés
260
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
28 septembre 2011
-
Modifié par Strumpfette le 14/03/2016 à 12:32
Dacobah Messages postés 260 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 28 septembre 2011 - 16 mai 2010 à 12:42
Dacobah Messages postés 260 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 28 septembre 2011 - 16 mai 2010 à 12:42
A voir également:
- Exclusion total d'enregistrements en SQL
- Total uninstall - Télécharger - Divers Utilitaires
- Total adblock avis - Forum Windows
- Supprimer Total Adblock - Forum Mozilla Firefox
- Enregistrer en pdf - Guide
- Formule total excel - Guide
2 réponses
Salut
décomposons un peu le bidule...
1) les ingrédients appréciés par Fiu :
select ingredient_id from ingredient i, aimer a, utilisateur u
where i.ingredient_id = a.ingredient_id
and a.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
2) les ingrédients détestés par Fiu :
select ingredient_id from ingredient i, detester d, utilisateur u
where i.ingredient_id = d.ingredient_id
and d.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
3) la synthèse brutale serait
select distinct r.recette_nom
from recette r, posseder p, ingredient i
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id in (requete appréciés)
and i.ingredient_id not in (requete détestés)
4) pour simplifier, on pourrait intégrer la sous-requête in à la requête principale et garder une sous-requête pour le not in
select distinct r.recette_nom
from recette r, posseder p, ingredient i, aimer a, utilisateur u
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id = a.ingredient_id
and a.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
and i.ingredient_id not in (
select ingredient_id from ingredient i, detester d, utilisateur u
where i.ingredient_id = d.ingredient_id
and d.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
)
5) une autre voie serait d'associer les recettes à chacune des requêtes appréciés/détestés et de soustraire les destestés via l'opérateur minus
select distinct r.recette_nom
from recette r, posseder p, ingredient i, aimer a, utilisateur u
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id = a.ingredient_id
and a.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
minus
select distinct r.recette_nom
from recette r, posseder p, ingredient i, detester d, utilisateur u
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id = d.ingredient_id
and d.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
6) à toi de jouer !
décomposons un peu le bidule...
1) les ingrédients appréciés par Fiu :
select ingredient_id from ingredient i, aimer a, utilisateur u
where i.ingredient_id = a.ingredient_id
and a.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
2) les ingrédients détestés par Fiu :
select ingredient_id from ingredient i, detester d, utilisateur u
where i.ingredient_id = d.ingredient_id
and d.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
3) la synthèse brutale serait
select distinct r.recette_nom
from recette r, posseder p, ingredient i
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id in (requete appréciés)
and i.ingredient_id not in (requete détestés)
4) pour simplifier, on pourrait intégrer la sous-requête in à la requête principale et garder une sous-requête pour le not in
select distinct r.recette_nom
from recette r, posseder p, ingredient i, aimer a, utilisateur u
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id = a.ingredient_id
and a.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
and i.ingredient_id not in (
select ingredient_id from ingredient i, detester d, utilisateur u
where i.ingredient_id = d.ingredient_id
and d.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
)
5) une autre voie serait d'associer les recettes à chacune des requêtes appréciés/détestés et de soustraire les destestés via l'opérateur minus
select distinct r.recette_nom
from recette r, posseder p, ingredient i, aimer a, utilisateur u
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id = a.ingredient_id
and a.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
minus
select distinct r.recette_nom
from recette r, posseder p, ingredient i, detester d, utilisateur u
where r.recette_id = p.recette_id
and p.ingredient_id = i.ingredient_id
and i.ingredient_id = d.ingredient_id
and d.utilisateur_id = u.utilisateur_id
and u.utilisateur_nom = 'Fiu'
6) à toi de jouer !
Dacobah
Messages postés
260
Date d'inscription
samedi 26 novembre 2005
Statut
Membre
Dernière intervention
28 septembre 2011
74
16 mai 2010 à 12:42
16 mai 2010 à 12:42
Mea Culpa ! J'avais oublié de précisé que mon problème avait résolu grâce à la cinquième solution proposée par Fiu. Merci encore !