Mysql 多次使用子查询
我需要一些人帮忙看风景 我有两个表需要“合并”在一起 第一个表包含有关产品的信息(产品颜色尺寸),其他表包含有关niveau产品季节颜色尺寸的库存、销售、可售(数量)等信息 我需要我的观点返回可用的公关产品。 同一产品的颜色大小可以是多次(可以是多个季节),因此我不能只计算可用的ex 我的问题是这样的Mysql 多次使用子查询,mysql,if-statement,subquery,sum,Mysql,If Statement,Subquery,Sum,我需要一些人帮忙看风景 我有两个表需要“合并”在一起 第一个表包含有关产品的信息(产品颜色尺寸),其他表包含有关niveau产品季节颜色尺寸的库存、销售、可售(数量)等信息 我需要我的观点返回可用的公关产品。 同一产品的颜色大小可以是多次(可以是多个季节),因此我不能只计算可用的ex 我的问题是这样的 SELECT SUM(( SELECT SUM(products_details.available) FROM
SELECT
SUM((
SELECT
SUM(products_details.available)
FROM
products_details
WHERE
products_details.product_id = products.id
)) AS available
FROM
products
但是,这是行不通的。如果一个大小有6个可用,而另一个大小有-5,则查询将返回1个可用。但是,实际上我有6个,我可以卖
因此我需要做一些调整
SELECT
SUM((
SELECT
SUM(
IF(
products_details.available > 0,
products_details.available,
0
)
)
FROM
products_details
WHERE
products_details.product_id = products.id
)) AS available
FROM
products
但是,这也行不通。如果一个季节的可用尺寸为6英寸,另一个季节的可用尺寸为-5英寸,则查询将返回6英寸。但是,这两行我需要求和,因为它是同一个乘积。因此,它需要返回1个可用
所以,我想出了
SELECT
SUM(
IF(
(
SELECT
SUM(
IF(
products_details.available > 0,
products_details.available,
0
)
)
FROM
products_details
WHERE
products_details.product_id = products.id
) > 0,
(
SELECT
SUM(
IF(
products_details.available > 0,
products_details.available,
0
)
)
FROM
products_details
WHERE
products_details.product_id = products.id
),
0
)
) AS available
FROM
products
但是,这将是非常(!!)缓慢的。我可以多次使用同一个子查询吗?所以我可以在If语句中使用它,如果它是正的,我可以在求和中使用相同的值
这很复杂,但我希望有人能帮我
/马德斯
编辑
我刚刚发现,我会写作
SELECT
SUM((
SELECT
IF(
SUM(products_details.available) > 0,
SUM(products_details.available),
0
)
FROM
products_details
WHERE
products_details.product_id = products.id
)) AS available
FROM
products
这样行吗
编辑2
我找到了一种新的、更快捷的方法来编写它,而且效果很好:——)
这是非常快的-从大约10秒到略高于1秒。子查询不是适合此工作的工具。事实上,子查询在日常SQL查询中相当少见。更有可能有用的是
JOIN
s
SELECT products.*, SUM(IF(product_details.available > 0, product_details.available, 0)) AS available
FROM products
INNER JOIN product_details ON (product_details.product_id = products.id)
GROUP BY products.id
这将为每个产品返回一行,其中包含该产品所有
产品的可用性
值的总和。\u详细信息
这将不起作用。我需要跨季节求和(大小可以是多个季节,但我需要它的求和值)。。我很想(!)使用join(我一直在使用它们),但是因为我需要一种特殊的求和方式,我不能那样使用它啊,我误解了这个限制。您如何确定哪个产品详细信息
记录是正确的?在你的例子中,一个有6个,一个有-5个,我怎么能判断6是正确的呢?如果我正确地阅读了你的样本,那只是一个将所有负值归零并继续求和的问题。我已经对我的查询进行了调整。我在这里简化了:)子查询中的where语句越多,它就越复杂。这不仅仅是归零。因为,在我检查weither是否为正之前,我需要先对各个季节进行求和。你可能想发布一个真实数据的示例和一个预期输出的示例。如果看不到季节、可用性和产品之间的相互关系,很难猜测查询应该是什么。
SELECT products.*, SUM(IF(product_details.available > 0, product_details.available, 0)) AS available
FROM products
INNER JOIN product_details ON (product_details.product_id = products.id)
GROUP BY products.id