首頁 > 資料庫 > mysql教程 > 如何在 SQL 中選擇包含所有指定體育項目的商品?

如何在 SQL 中選擇包含所有指定體育項目的商品?

Barbara Streisand
發布: 2024-12-24 18:23:11
原創
304 人瀏覽過

How to Select Offers Containing All of a Specified Set of Sports in SQL?

「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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板