使用 SQL 查询多对多关系表,根据多个条件筛选结果

今天中午,我坐在厨房里,看着冰箱里的食材,心想:“好吧,我得做点新的了。
”突然,我想到了那个SQL语句,它就像一个神秘的助手,可以帮助我找到包含我想吃的食材的菜谱。
例如,我最近迷上了鸡蛋和牛奶,所以我需要找到一个食谱来尝试。

我拿出手机,打开菜谱查询APP,输入SQL语句中的关键字段:“鸡蛋”、“牛奶”。
瞬间,屏幕上出现了一长串菜谱名称,全都是这两个关键词。
我点击食谱并查看成分列表。
嗯,恰好都是鸡蛋和牛奶。

等一下,我突然想到这个方法好像不仅仅限于鸡蛋和牛奶。
例如,如果我要查找的菜谱包含“番茄”和“奶酪”,我是否可以使用相同的方法来查询它?我必须尝试一下。

我很快编辑了SQL语句,将WHERE子句中的条件改为“'番茄','奶酪'”,然后输入到APP中。
过了一段时间,出现了一些新的食谱名称,它们都含有西红柿和奶酪。
这非常简单,省去了我一张一张地查看食谱的麻烦。

但我想,如果食材的种类多了,这种方法还能这么快找到合适的菜谱吗?我得再试几次才能看到。
不过话说回来,如今的生活越来越离不开这些智能小玩意儿,省时又省力。
等等,还有一件事,我要看看这个APP有没有智能推荐功能。
也许它可以帮助我发现一些新的食谱。

如何高效查询多对多关系数据库中特定水果组合是否存在?

是的,这是一个问题。
直接查看,不要拐弯抹角。

首先检查目标水果:2 个苹果和1 个香蕉。
例如:
sql SELECT fb.bucket_id 来自水果桶FB WHERE (fb.fruit_id = 2 AND fb.count = 2 ) -
过滤 2 个苹果 OR (fb.fruit_id = 3 AND fb.count = 1 ) -
过滤 1 个香蕉 按 fb.bucket_id 分组 HAVING COUNT() = 2 -
确保只有苹果和香蕉。
AND SUM(CASE WHEN fb.fruit_id = 2 THEN fb.count ELSE 0 END) = 2 -
苹果数对 AND SUM(CASE WHEN fb.fruit_id = 3 THEN fb.count ELSE 0 END) = 1 ; -
一对数字“香蕉”
使用索引,不要扫描整个表。
例如,在Fruit_id和Bucket_id上创建复合索引。

不要使用中间查询或子查询,它太慢了。
这是一种直接的方法,效率很高。