sql >> Base de Datos >  >> RDS >> Mysql

SQL-Query necesitaba encontrar identificaciones distintas probablemente usando IN y 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)
                    )

Como mencionó Jeffrey L Whitledge, la consulta anterior devolverá cualquier receta que tenga al menos una ingrediente en la lista deseada y ninguno en la lista no deseada. Sin embargo, si quisiera devolver recetas que contenían todas los ingredientes en la lista deseada y ninguno en la lista no deseada que podrías hacer:

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)
                    )

En este escenario, primero debe determinar la cantidad de ingredientes deseados.