提问人:loic.k 提问时间:10/27/2022 更新时间:10/27/2022 访问量:38
在联接表中仅查找完全匹配项
Find only complete match in join table
问:
我有 3 张桌子,Pizza、Ingredient 和 PizzaIngredients,这是我的前两张桌子之间的连接表。
比萨饼
编号 | 名字 |
---|---|
1 | 玛格丽塔 |
2 | 香肠 |
3 | 素食主義者 |
成分
编号 | 名字 |
---|---|
1 | 番茄 |
2 | 香肠 |
3 | 生菜 |
披萨配料
披萨 Id | 成分 Id |
---|---|
1 | 1 |
2 | 1 |
2 | 2 |
3 | 1 |
3 | 3 |
我有一份配料清单,我想列出我可以用我拥有的配料制作的所有比萨饼。为了能够制作披萨,我需要拥有它的所有成分
如果在我的配料清单中,我有:,我想退回id 1的披萨,因为我只能制作玛格丽塔披萨。
如果在我的配料清单中,我有:,我想退回id 1和3的比萨饼,因为我有可能制作玛格丽塔或素食。[1]
[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数据库
答:
1赞
Edouard
10/27/2022
#1
试试这个:
SELECT pi.pizzaId
FROM pizzaIngredients pi
GROUP BY pi.pizzaId
HAVING array_agg(ingredientId) <@ array [1,3]
评论
0赞
loic.k
10/27/2022
谢谢爱德华,这就是我想要的结果。我计划使用 TypeORM 将其转换为我的代码,这在处理 postgresql 函数时非常糟糕,而且我不想使用原始查询。您是否知道如何,或者如果有可能,我可以获得与您的查询相同的结果,但不使用 postgresql 函数?如果没有,我会批准你的回答
0赞
Edouard
10/27/2022
嗨,Loic,对TypeORM一无所知,对不起
0赞
loic.k
10/27/2022
哦,不用担心,我会处理 TypeORM 部分!只是想知道您是否有没有 postgres 函数的 sql 查询的想法来获得相同的结果
上一个:从未交手过的回归球队 - SQL
下一个:联接类型和预期输出
评论