2011-01-14 120 views
0

我有这3个表在我的DB: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)的X型产品(skuid),并且他们的至少一个子女有quantity > 0in_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'