我想存档的内容:
获取用户ID 2002已取消的订单总金额的正确总和。
一些前置信息:
我有deals
,其价格在deals.price
中,id在deals.ID
中
然后,我有了orders
,并带有deals.ID
的外键
运行此SQL:
select SUM(deals.price), orders.* from orders
JOIN deals ON deals.ID = orders.deal_id
where orders.user_id = 2002
and orders.cancelled = 1
效果很好。
这是我卡住的地方:
作为交易的补充,每笔交易都具有各自价格的产品。
该表称为Deal_products,deal_products.price持有价格,deal_products.product_id具有其ID。
将订单附加到另一个称为order_products的表中的交易产品上,其中order_products.product_id = deal_products.product_id
总结:我想做的是在上述SQL中包含if。
如果订单的order_products中有一行,请获取order_products.product_id并在deal_products(价格)中找到价格,并在SUM()处理时使用它而不是deal.price。
如果没有行,则应使用deals.price。
如何归档?首先查看另一个表中是否有条目,然后进一步查看第三个表并获取要使用的值?
最佳答案
您可以使用COALESCE + LEFT JOIN:
select SUM(coalesce(dp.price, d.price)), o.*
from orders o JOIN deals d ON d.ID = o.deal_id
LEFT JOIN order_products op on op.order_id = o.id
LEFT JOIN deal_products dp on op.product_id = dp.product_id
where o.user_id = 2002 and o.cancelled = 1
group by ...;
COALESCE
函数返回第一个非空操作数LEFT [OUTER] JOIN = [INNER] JOIN
+ LEFT JOIN关键字左侧结构的所有行,与右侧结构中的ON子句不匹配。