Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme de requete assez compliquée

3 réponses
Avatar
JO
bonjour,
j'ai une table recette, une table ingredient, Ingredient_Recette.

Ds Recette: Id, Nom
Ds Ingredient: Id, Nom
Ds Ingredient_Recette: Id_Recette,Id_Ingredient, Qte

Comment puis je faire une requete qui me permet de remonter toutes les
recettes qui contiennent Ingredient1 ET Ingredient2...

Merci

3 réponses

Avatar
Patrice
Le plus clair pour débuter serait la clause EXISTS :

SELECT * FROM Recettes
WHERE EXISTS(SELECT 1 FROM Ingredient WHERE Id_Recette=Id AND
Nom='Ingredient1')
AND EXISTS(SELECT 1 FROM Ingredient WHERE Id_Recette=Id AND
Nom='Ingredient2')

En clair les recettes pour lesquelles il existe une ligne pour l'ingrédient
1 et une ligne avec l'ingrédient 2 pour cette même recette...

Après il y a des variations possibles avec par exemple des LEFT JOIN, des
regroupements etc... au détriment de la clarté de l'objectif poursuivi.

Voir par exemple http://sql.developpez.com/sqlaz/sousrequetes/#L1.5.1 et
plus généralement le site pour une initiation....

---
Patrice

"JO" a écrit dans le message de news:

bonjour,
j'ai une table recette, une table ingredient, Ingredient_Recette.

Ds Recette: Id, Nom
Ds Ingredient: Id, Nom
Ds Ingredient_Recette: Id_Recette,Id_Ingredient, Qte

Comment puis je faire une requete qui me permet de remonter toutes les
recettes qui contiennent Ingredient1 ET Ingredient2...

Merci




Avatar
Patrice
Oups. Manque le join pour récupérer le nom des ingrédients et l'alias pour
lever l'ambigüité sur le nom ce qui donnerait finalement quelque chose comme
:

SELECT * FROM Recette
WHERE EXISTS(SELECT 1 FROM Ingredient_Recette JOIN Ingredient ON
Id_Ingredient=Ingredient.Id WHERE Id_Recette=Recette.Id AND
Ingredient.Nom='Ingredient1')
SELECT 1 FROM Ingredient_Recette JOIN Ingredient ON
Id_Ingredient=Ingredient.Id WHERE Id_Recette=Recette.Id AND
Ingredient.Nom='Ingredient2')

--
Patrice


"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Le plus clair pour débuter serait la clause EXISTS :

SELECT * FROM Recettes
WHERE EXISTS(SELECT 1 FROM Ingredient WHERE Id_Recette=Id AND
Nom='Ingredient1')
AND EXISTS(SELECT 1 FROM Ingredient WHERE Id_Recette=Id AND
Nom='Ingredient2')

En clair les recettes pour lesquelles il existe une ligne pour
l'ingrédient 1 et une ligne avec l'ingrédient 2 pour cette même recette...

Après il y a des variations possibles avec par exemple des LEFT JOIN, des
regroupements etc... au détriment de la clarté de l'objectif poursuivi.

Voir par exemple http://sql.developpez.com/sqlaz/sousrequetes/#L1.5.1 et
plus généralement le site pour une initiation....

---
Patrice

"JO" a écrit dans le message de news:

bonjour,
j'ai une table recette, une table ingredient, Ingredient_Recette.

Ds Recette: Id, Nom
Ds Ingredient: Id, Nom
Ds Ingredient_Recette: Id_Recette,Id_Ingredient, Qte

Comment puis je faire une requete qui me permet de remonter toutes les
recettes qui contiennent Ingredient1 ET Ingredient2...

Merci








Avatar
JO
Patrice a formulé la demande :
Oups. Manque le join pour récupérer le nom des ingrédients et l'alias pour
lever l'ambigüité sur le nom ce qui donnerait finalement quelque chose comme
:

SELECT * FROM Recette
WHERE EXISTS(SELECT 1 FROM Ingredient_Recette JOIN Ingredient ON
Id_Ingredient=Ingredient.Id WHERE Id_Recette=Recette.Id AND
Ingredient.Nom='Ingredient1')
SELECT 1 FROM Ingredient_Recette JOIN Ingredient ON
Id_Ingredient=Ingredient.Id WHERE Id_Recette=Recette.Id AND
Ingredient.Nom='Ingredient2')

--
Patrice


"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Le plus clair pour débuter serait la clause EXISTS :

SELECT * FROM Recettes
WHERE EXISTS(SELECT 1 FROM Ingredient WHERE Id_Recette=Id AND
Nom='Ingredient1')
AND EXISTS(SELECT 1 FROM Ingredient WHERE Id_Recette=Id AND
Nom='Ingredient2')

En clair les recettes pour lesquelles il existe une ligne pour l'ingrédient
1 et une ligne avec l'ingrédient 2 pour cette même recette...

Après il y a des variations possibles avec par exemple des LEFT JOIN, des
regroupements etc... au détriment de la clarté de l'objectif poursuivi.

Voir par exemple http://sql.developpez.com/sqlaz/sousrequetes/#L1.5.1 et
plus généralement le site pour une initiation....

---
Patrice

"JO" a écrit dans le message de news:

bonjour,
j'ai une table recette, une table ingredient, Ingredient_Recette.

Ds Recette: Id, Nom
Ds Ingredient: Id, Nom
Ds Ingredient_Recette: Id_Recette,Id_Ingredient, Qte

Comment puis je faire une requete qui me permet de remonter toutes les
recettes qui contiennent Ingredient1 ET Ingredient2...

Merci











merci