我需要一些关于视图的帮助。
我有 2 个表需要“合并”在一起。
第一个表包含有关产品的信息(product-color-size),其他表包含有关 product-season-color-size niveau 的库存、已售、可用(数量)等信息。
我需要我的观点来返回可用的公关产品。相同的 product-color-size 可以多次(可以在多个季节),因此我不能只对可用的 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 语句中使用它,如果它是肯定的,我可以在总和中使用相同的值吗?
这很复杂,但我希望有人能帮助我
/疯子
编辑
我才发现,我可以写
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
我找到了一种新的、更快的方法来编写它,而且效果很好:-)
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 秒。