我需要一些幫助和看法。多次使用子查詢
我有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