sql >> Databáze >  >> RDS >> Mysql

SQL-Query potřeboval najít odlišná ID pravděpodobně pomocí IN a 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)
                    )

Jak zmínil Jeffrey L Whitledge, výše uvedený dotaz vrátí jakýkoli recept, který má alespoň jeden přísada v požadovaném seznamu a žádná v nežádoucím seznamu. Pokud jste však chtěli vrátit recepty, které obsahovaly vše přísady v požadovaném seznamu a žádné v nežádoucím seznamu, který byste mohli udělat:

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

V tomto scénáři byste museli nejprve určit počet požadovaných přísad.




  1. kódování mySQL a PHP

  2. DataTable s Ajaxem nefunguje dobře po použití serverSide:true

  3. Foreach or For – to je otázka

  4. Existuje způsob, jak vidět připravený dotaz, jak bude spuštěn v databázi?