Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL-Query nécessaire pour trouver des identifiants distincts utilisant probablement IN et NOT IN

Select Distinct ...
From Recipes As R
Where R.ingredient in(ingredient_a, ingredient_b...)
    And Not Exists(
                    Select 1
                    From Recipes As R2
                    Where R2.Recipe = R.Recipe
                        And R2.Ingredient In(ingredient_d)
                    )

Comme Jeffrey L Whitledge l'a mentionné, la requête ci-dessus renverra toute recette qui en a au moins une ingrédient dans la liste souhaitée et aucun dans la liste indésirable. Cependant, si vous vouliez renvoyer des recettes qui contenaient tous les ingrédients dans la liste souhaitée et aucun dans la liste indésirable, vous pourriez faire :

Select Distinct ...
From Recipes As R
Where Exists    (
                Select 1
                From Recipes As R2
                Where R2.Recipe = R.Recipe
                    And R2.ingredient in(ingredient_a, ingredient_b...)
                Having Count(*) = @CountOfPassedIngredients
                )
    And Not Exists(
                    Select 1
                    From Recipes As R2
                    Where R2.Recipe = R.Recipe
                        And R2.Ingredient In(ingredient_d)
                    )

Dans ce scénario, vous devez d'abord déterminer le nombre d'ingrédients souhaités.