「SQL where 連結集必須包含所有值,但可能包含更多值」
理解要求
理解要求理解要求
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;
理解要求
理解要求
class Offer < ActiveRecord::Base has_and_belongs_to_many :sports def self.includes_sports(*sport_names) joins(:sports) .where(sports: { name: sport_names }) .group('offers.id') .having("count(*) = ?", sport_names.size) end end理解要求理解要求理解需求 考慮三個相關表:offers、sports 和Offers_sports,透過具有並屬於多個關係。目標是選擇包含指定運動項目的商品,其中商品必須包含所有指定的運動項目,但可能還有其他運動項目。 潛在解決方案一個方法是使用 JOIN、WHERE、GROUP BY 和 HAVING 子句的組合來根據所需條件過濾結果。具體來說:此查詢首先連接三個表格以檢索優惠及其關聯的體育項目。 WHERE 子句將搜尋限制為具有指定名稱的體育項目。 GROUP BY 子句會依商品 ID 將結果分組,HAVING 子句確保僅選擇包含所有指定運動的商品。 改進的ActiveRecord 實作提供的ActiveRecord解決方案可以進一步細化以提高效率:此方法使用連結來執行單一查詢中的必要操作,包括JOIN、WHERE、GROUP BY 和HAVING。它也透過使用問號 (?) 佔位符動態傳遞預期計數值來簡化 HAVING 子句。
以上是如何在 SQL 中選擇包含所有指定體育項目的商品?的詳細內容。更多資訊請關注PHP中文網其他相關文章!