結合セットにはすべての値が含まれている必要がありますが、さらに多くの値が含まれる可能性がある SQL
リレーションシップを持つテーブルのセットが与えられた場合、目標はレコードを取得することです指定された値の配列を含む 1 つのテーブル (オファー) から、追加の値も含まれる可能性があります。
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 中国語 Web サイトの他の関連記事を参照してください。