0

Product_Attributes テーブルの Products テーブルを結合するクエリがあります。私は肉の正確な状態の製品を手に入れたいです。

属性 ID 9 と 16 が選択されている製品ですが、このクエリを実行すると、最初の ID を満たす製品のみが取得されます

WHERE ("AttributeValueID" = 9 AND "AttributeValueID" = 16)

製品で両方の属性が選択されている必要がありAttributeValueID = 9 AND AttributeValueID = 9 not only this or that attribute ID.ますOR / IN

アップデート:

以下は、結合 / を使用したクエリの一部です。

LEFT JOIN "Product_Attributes" ON "Product_Attributes"."ProductID" = "SiteTree_Live"."ID" WHERE ("PriceTax" >= '100' AND "PriceTax" <= '200') AND ("AttributeValueID" IN ('9 ','8','7')) AND ("AttributeValueID" IN ('5','4'))

よろしくお願いします。

4

2 に答える 2

0

Gordon の回答は、指定された基準を満たす ProductId 値のリストを取得する最も柔軟な方法を示しています。

Gordon のような (ProductId のセットを取得する) クエリをインライン ビューとして使用し、次のように製品テーブルに対して JOIN 操作を実行できます。

SELECT p.ProductID
     , p.ProductName
     , ...
  FROM products p
  JOIN ( 
         SELECT a.ProductID
           FROM ProductAttributes a
          GROUP BY a.ProductId
         HAVING SUM(a.AttributeValueID=9) > 0
            AND SUM(a.AttributeValueID=16) > 0
       ) s
     ON s.ProductID = p.ProductID

アップデート

質問への編集に基づいて、SQL テキストのスニペットを追加します。

JOIN ( SELECT a.ProductID
         FROM Product_Attributes a
        HAVING SUM(a.AttributeValueID IN ('9','8','7')) > 0
           AND SUM(a.AttributeValueID IN ('5','4')) > 0
         GROUP BY a.ProductID
     ) s
   ON s.ProductID = SiteTree_Live.ID
WHERE SiteTree_Live.PriceTax >= '100'
  AND SiteTree_Live.PriceTax <= '200'
于 2014-04-21T16:43:38.497 に答える