2011-01-14 9 views
0

私のDBには、この3つのテーブルがあります。product (id, sku, type, price)product_relation (parent_id, child_id)product_stock (product_id, quantity, in_stock)です。製品間には可能な関係があります。タイプXの製品は、タイプYの複数の製品(テーブルはproduct_relationのテーブルに保持されています)の親(できます)からなることができます。タイプXのDB製品では、常に数量が0に設定されています。在庫があるタイプ(in_stock = true)の商品(skuおよびid)、少なくとも1人の子供がquantity > 0またはin_stock = trueの商品のみを入手する必要があります。mysqlでサブクエリを正しく使用する

私は数時間それに固執しています。私はこれについて良い質問をすることはできません。私が達成した最も近いものは


SELECT a.`id`, a.`sku` FROM `product` AS a 
INNER JOIN `product_stock` AS b 
ON a.`id` = b.`product_id` 
INNER JOIN `product_relation` AS c 
ON c.`child_id` = b.`product_id` 
WHERE b.`in_stock` = 1 AND a.`type` = 'X' 

ですが、多くのアイテムが見つからないので、それは良くありません。私はこれがジョインだけで処理できるかサブクエリが ヘルプを持っているかわかりません。

答えて

3

私はあなたが尋ねてきたことを完全に理解していません。これは役に立ちますか?

SELECT a.id, a.sku 
FROM product AS a 
    INNER JOIN product_stock AS b ON a.id = b.product_id 
WHERE b.in_stock = 1 AND a.type = 'X' 
and exists (
    SELECT 'EXISTS' 
    FROM product d 
     INNER JOIN product_relation AS c ON c.child_id = d.product_id 
    WHERE 
     c.product_id = a.product_id 
     AND (d.quantity > 0 or d.in_stock = true) 

) 
0

不要な場合は、サブクエリは必要ありません。ここでの利点は、どの子供が基準を満たしているかを知りたければ、そのフィールドをselect節に追加することができるということです。

SELECT DISTINCT parent.`id`, parent.`sku` 


FROM 
`product` parent as parent 
INNER JOIN `product_relation` AS c 
ON c.`parent_id` = b.`product_id` 
INNER JOIN `product_stock` AS parent_stock 
ON p.`product_id` = parent_stock.`product_id`  
INNER JOIN `product` as child 
ON c.`child_id` = child.`product_id` 
INNER JOIN `product_stock` AS child_stock 
ON c.`product_id` = child_stock.`product_id`  

WHERE parent_stock.`in_stock` = 1 
    and (child_stock.`in_stock` = 1 or child_stock.`quantity`> 0) 
    and parent.`type` = 'X' 
関連する問題