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;
注意事项:
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中文网其他相关文章!