我需要一些帮助和看法。多次使用子查询
我有2个表,我需要“合并”在一起。
第一个表包含有关产品(产品颜色尺寸)信息,以及其他表有大约股票,出售,即时拍摄产品赛季彩大小niveau(数量)等信息。
我需要我的观点返回可用的PR产品。 相同的产品颜色大小可以多次(它可以在多个季节),因此我不能只对可用的ex进行总结。
我的查询看起来像这样
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语句中使用它,如果它是肯定的,我可以使用相同的值来使用总和?
这是非常复杂的,但我希望有人能帮助我
/的Mads
编辑
我才发现,我可以写
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
可以工作好吗
EDIT2
我发现把它写一个新的和更快捷的方式,并且它工作得很好:-)
SELECT
SUM(GREATEST(0,(
SELECT
SUM(products_details.available)
FROM
products_details
WHERE
products_details.product_id = products.id
))) AS available
FROM
products
GROUP BY
products.id
这是非常快的 - 从大约10秒至略高于1秒。
这是行不通的。 我需要在整个季节SUM(大小可以在多个季节,但我需要它的SUMmed值).. 我很喜欢(!)使用连接(我一直使用它们),但是因为我需要SUM特殊的方式,所以我不能以这种方式使用 – Mads 2012-07-09 12:47:13
啊,我误解了这个限制。你如何识别哪个'product_details'记录是正确的?在你的例子中,一个人有6个,一个人有-5个,我怎么能告诉6是正确的? – VoteyDisciple 2012-07-09 12:51:50
如果我正确读取你的样本,这只是一个消除任何负值的问题,并仍然总结它们。我已经对我的查询做了调整。 – VoteyDisciple 2012-07-09 12:53:07