sql >> Databasteknik >  >> RDS >> Mysql

SQL-Query behövs för att hitta distinkta ID:n som förmodligen använder IN och 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)
                    )

Som Jeffrey L Whitledge nämnde kommer ovanstående fråga att returnera alla recept som har minst ett ingrediens i den önskade listan och ingen i den oönskade listan. Men om du ville returnera recept som innehöll alla ingredienserna i den önskade listan och ingen i den oönskade listan kan du göra:

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

I det här scenariot måste du först bestämma antalet önskade ingredienser.




  1. Hur Hibernate Batch-insättning fungerar?

  2. Flera uppsättningar och where-satser i Update-fråga i mysql

  3. SQL-fråga för att få alla produkter, kategorier och metadata woocommerce/wordpress

  4. Exekvera SQL-skript på docker-container