判断多对多关联组是否存在
在多对多关系中,有时我们需要确定是否存在具有一定关联特征的组。以水果篮子为例,需求是查询是否存在一个篮子,其中包含 2 个苹果和 1 个香蕉。
解决方案:
select bucket_id from 水果篮子对应表 where fruit_id = 2 and count = 2 intersect select bucket_id from 水果篮子对应表 where fruit_id = 3 and count = 1;
SELECT bucket_id FROM ( SELECT bucket_id FROM 水果篮子对应表 GROUP BY bucket_id HAVING COUNT(1) = 2 ) AS t WHERE bucket_id IN ( SELECT bucket_id FROM 水果篮子对应表 WHERE fruit_id = 2 AND count = 2 INTERSECT SELECT bucket_id FROM 水果篮子对应表 WHERE fruit_id = 3 AND count = 1 );
如果该 sql 语句返回结果,则表明存在一个符合条件的篮子。否则,则没有这样的篮子。
提示:
该解决方案仅适用于数据量较小的场景。如果数据量较大,可能存在性能问题。