我有 3 張桌子,Pizza、Ingredient 和 PizzaIngredients,這是我的前兩張桌子之間的連接表。
比薩
| ID | 姓名 |
|---|---|
| 1 | 瑪格麗塔 |
| 2 | 意大利辣香腸 |
| 3 | 素食主義者 |
成分
| ID | 姓名 |
|---|---|
| 1 | 番茄 |
| 2 | 意大利辣香腸 |
| 3 | 生菜 |
比薩配料
| 比薩ID | 成分編號 |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
| 3 | 3 |
我有一份配料清單,我想列出我能用我有的配料做的所有比薩餅。為了能夠制作披薩,我需要擁有它的所有成分
如果在我的配料清單中有 : [1],我想退回 id 為 1 的披薩,因為我只能制作瑪格麗塔披薩。
如果在我的配料清單中:[1, 3],我想退回 id 為 1 和 3 的比薩,因為我可以制作瑪格麗塔或素食。
我試過的:
SELECT
pi.pizzaId
FROM
pizzaIngredients pi
WHERE
pi.ingredientsId NOT IN (
SELECT
DISTINCT pi2.ingredientsId
FROM
pizzaIngredients pi2
WHERE
pi2.ingredientsId NOT IN ('1')
)
但它也回傳了我不想要的披薩 2 和 3,因為我沒有所有的原料。我使用一個 postgresql 資料庫
uj5u.com熱心網友回復:
嘗試這個 :
SELECT pi.pizzaId
FROM pizzaIngredients pi
GROUP BY pi.pizzaId
HAVING array_agg(ingredientId) <@ array [1,3]
小提琴手
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/521708.html
