sql >> データベース >  >> RDS >> Mysql

レシピデータベース、材料で検索

    レシピは複数の材料を使用でき、指定された1つ以上の材料を使用するレシピを探しているため、DISTINCTを使用する必要があります。 レシピが指定されたリストから複数の材料を使用している場合に重複する結果を防ぐためのキーワード。また、INを使用することもできます 複数の成分IDでフィルタリングする句。

    select DISTINCT r.name
    from 
        recipes r
        inner join ingredient_index i
        on i.recipe_id = r.recipe_id
    where i.ingredient_id IN (7, 5);
    

    または、リストで指定されたすべての材料を使用しているレシピを探している場合は、レシピ名で結果をグループ化し、レコードの数がリストの材料の数と同じかどうかを確認できます。

    select r.name
    from 
        recipes r
        inner join ingredient_index i
        on i.recipe_id = r.recipe_id
    where i.ingredient_id IN (7, 5)
    GROUP BY r.name
    HAVING COUNT(*) = 2
    

    これは、同じ(recipe_id、component_id)タプルを持つ重複レコードがないことを前提としています(UNIQUE制約でより確実になります)。



    1. SQLServerのforループの構文

    2. テンプレートデータベースコレクションのコーディングを変更する方法

    3. TypeORMサブクエリ

    4. MySQLのインストール