正确使用mysql子查询

时间:2011-01-14 14:57:03

标签: sql join subquery

我的数据库中有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.现在就是这个。我只需要获取X型的产品(skuid),这些产品有库存(in_stock = true)且至少有一个孩子有quantity > 0或{{1 }}。

我坚持了好几个小时。我无法对此做出好的质询。我取得的最接近的是

in_stock = true

但这并不好,因为很多物品都丢失了。我不知道这是否只能通过连接或子查询来处理 请帮助。

2 个答案:

答案 0 :(得分: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)

)

答案 1 :(得分: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'