在我的 Web 應用程式中,我有 3 個表:
- 選項卡 A:食譜(ID、名稱)
- 選項卡 B:Recipes_Ingredients(id, fk_recipe,fk_ingredient, quantity)橋接表
- TAB C:成分(ID、名稱)
我需要找到包含提供的成分串列 (TAB C) 的所有食譜 (TAB A)。
埃斯:
我提供了一個成分串列,例如 111(意大利面)、222(胡椒)、333(油),我需要找到所有包含這些成分的食譜。查詢應該回傳我所有最多包含這些成分的食譜。
因此,如果我運行這樣的搜索:
...
WHERE TAB_B.fk_ingredients IN (111,222,333) // IT DOESN'T WORKS AS I WISH
...
它必須回傳一個配方串列,其中包含一個配方串列,其中包含 MAX 成分 (111,222,333) 和最少一種我通過它的成分。
結果示例:
| ID | 姓名 | list_fk_ingredients (es.) |
|---|---|---|
| 1 | 辣椒意粉 | 111,222 |
| 2 | 意大利面加油 | 111,333 |
| 3 | 胡椒一無所有 | 222 |
| 4 | 意大利面與一切 | 111,222,333 |
我還需要一種將查詢報告回 JPA 的方法。
提前致謝!
問候
uj5u.com熱心網友回復:
試試這個查詢:
SELECT ri.recipes_id
FROM recipes_ingredients ri
GROUP BY ri.recipes_id
HAVING COUNT(CASE WHEN ri.ingredients_id NOT IN (111,222,333) THEN 1 ELSE NULL END) =0;
uj5u.com熱心網友回復:
首先,您需要一個子查詢,在其中加入表,然后按食譜對它們進行分組
SELECT R.name, count(R.id) AS sum
FROM Recipes as R
join Recipes_Ingredients as RI on R.id=RI.fk_recipe
group by R.id
它將向您輸出所有食譜的串列,并計算每個食譜有多少成分。我在這里將成分計數命名為總和。
您無需加入成分表。
接下來,您只需使用 WHERE 陳述句從此查詢中選擇具有 3 或更少和 1 或更多的記錄。
SELECT R.name, sum
FROM (SELECT R.name, count(R.id) AS sum
FROM Recipes as R
join Recipes_Ingredients as RI on R.id=RI.fk_recipe
group by R.id) as T
WHERE sum <= 3
AND sum >=1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478774.html
下一篇:在C 中將通用類分配為null
