Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中正确使用子查询_Sql_Join_Subquery - Fatal编程技术网

在mysql中正确使用子查询

在mysql中正确使用子查询,sql,join,subquery,Sql,Join,Subquery,我的数据库中有这3个表:产品(id、sku、类型、价格),产品关系(父项id、子项id)和产品库存(产品id、数量、库存)。产品之间可能存在关系:类型X的产品可以是类型Y的多个产品的父产品(可以由多个产品组成)(关系保存在Product\u relation表中)。在DB中,类型X的产品的数量始终设置为0。事情是这样的。我只需要获得库存(in_stock=true)的X型产品(sku和id),并且至少有一个孩子的quantity>0或in_stock=true) 这件事我坚持了好几个小时。我不能

我的数据库中有这3个表:
产品(id、sku、类型、价格)
产品关系(父项id、子项id)
产品库存(产品id、数量、库存)
。产品之间可能存在关系:类型X的产品可以是类型Y的多个产品的父产品(可以由多个产品组成)(关系保存在
Product\u relation
表中)。在DB中,类型X的产品的数量始终设置为0。事情是这样的。我只需要获得库存(
in_stock=true
)的X型产品(
sku
id
),并且至少有一个孩子的
quantity>0
in_stock=true

这件事我坚持了好几个小时。我不能对此提出一个好的质疑。我取得的最接近的成绩是


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'
但这并不好,因为很多东西都不见了。我不知道这是否只能通过连接或子查询来处理
请帮帮我。

我不能完全肯定我理解了你的要求;这有用吗

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)

)

我不完全确定我是否理解你的要求;这有用吗

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)

)

如果不需要子查询,则不需要它。这里的优点是,如果您想知道哪些子级满足条件,您可以将其字段添加到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'

如果不需要子查询,则不需要它。这里的优点是,如果您想知道哪些子级满足条件,您可以将其字段添加到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'