Mysql
 sql >> Database >  >> RDS >> Mysql

SQL-Query necessario per trovare ID distinti probabilmente utilizzando IN e 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)
                    )

Come menzionato da Jeffrey L Whitledge, la query precedente restituirà qualsiasi ricetta che ne abbia almeno una ingrediente nell'elenco desiderato e nessuno nell'elenco indesiderato. Tuttavia, se desideri restituire ricette che contenevano tutte gli ingredienti nella lista desiderata e nessuno nella lista indesiderata potresti fare:

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 questo scenario, dovresti prima determinare il conteggio degli ingredienti desiderati.