高效验证多对多关联关系中特定水果组合的存在性
本文探讨如何在多对多关联关系中,快速判断是否存在一个篮子同时包含指定数量的特定水果。假设数据库包含三个表:水果表、篮子表和水果篮子对应表,关系如下:
水果表 (fruits: id, name):存储水果信息,例如 (1, ‘桃子’), (2, ‘苹果’), (3, ‘香蕉’)。
篮子表 (bucket: id):存储篮子信息,例如 (1), (2), (3)。
水果篮子对应表 (id, bucket_id, fruit_id, count):存储水果与篮子的对应关系及数量,例如 (1, 1, 2, 2) 表示1号篮子包含2个苹果,(2, 1, 3, 1) 表示1号篮子包含1个香蕉。
问题是如何判断是否存在一个篮子,仅包含2个苹果和1个香蕉。
一种方法是使用多步筛选:先找出包含2个苹果的篮子,再找出包含1个香蕉的篮子,最后找出同时满足条件且仅包含这两种水果的篮子。 SQL语句如下:
SELECT t3.bucket_idFROM ( SELECT t1.bucket_id FROM (SELECT bucket_id FROM fruits_buckets WHERE fruit_id = 2 AND count = 2) t1 INNER JOIN (SELECT bucket_id FROM fruits_buckets WHERE fruit_id = 3 AND count = 1) t2 ON t1.bucket_id = t2.bucket_id) t3INNER JOIN ( SELECT bucket_id FROM fruits_buckets GROUP BY bucket_id HAVING COUNT(*) = 2) t4 ON t3.bucket_id = t4.bucket_id;
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。