首页 > 数据库 > mysql教程 > 如何使用 SQL 连接检索包含所有给定值集(但可能更多)的记录?

如何使用 SQL 连接检索包含所有给定值集(但可能更多)的记录?

Linda Hamilton
发布: 2024-12-17 14:35:12
原创
845 人浏览过

How to Retrieve Records Containing All of a Given Set of Values (But Potentially More) Using SQL Joins?

SQL where join set 必须包含所有值,但可能包含更多值

给定一组具有关系的表,目标是检索记录来自包含给定值数组但也可能具有其他值的一个表(优惠)。

在 SQL 中,这可以使用以下方式实现连接、分组和 HAVING 子句的组合。以下查询完成此任务:

SELECT o.*
FROM   sports        s
JOIN   offers_sports os ON os.sport_id = s.id
JOIN   offers        o  ON os.offer_id = o.id
WHERE  s.name IN ('Bodyboarding', 'Surfing') 
GROUP  BY o.id  -- !!
HAVING count(*) = 2;
登录后复制

注意事项:

  • 商品表的主键 (o.id) 用于分组确保每个报价都计算一次。
  • GROUP BY 可用于聚合记录,而无需使用 DISTINCT在计数操作中。
  • HAVING 子句过滤分组结果,仅包含满足所需条件的优惠(在本例中为两项特定运动)。

ActiveRecord 实现:

def self.includes_sports(*sport_names)
  joins(:sports)
    .where(sports: { name: sport_names })
    .group('offers.id')
    .having("count(*) = ?", sport_names.size)
end
登录后复制

通过此方法,您可以查询包含指定运动名称的优惠ActiveRecord:

offers = Offer.includes_sports("Bodyboarding", "Surfing")
登录后复制

以上是如何使用 SQL 连接检索包含所有给定值集(但可能更多)的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板