Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Abfrage erforderlich, um eindeutige IDs zu finden, die wahrscheinlich IN und NOT IN verwenden

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

Wie Jeffrey L. Whitledge erwähnte, gibt die obige Abfrage jedes Rezept zurück, das mindestens eines hat Inhaltsstoff in der gewünschten Liste und keiner in der unerwünschten Liste. Wenn Sie jedoch Rezepte zurückgeben möchten, die alle enthalten die Zutaten in der gewünschten Liste und keine in der unerwünschten Liste, könnten Sie Folgendes tun:

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

In diesem Szenario müssten Sie zunächst die Anzahl der gewünschten Zutaten bestimmen.