我想在我的数据库中创建一个包含少量逻辑的视图。这是为了检查产品的可用性。我创建了一个简化的模式作为SQL Fiddle。
但是,我需要在多个列中重复使用一个值。这是我想做的事情:
SELECT
product.id AS id,
SUM(IFNULL(purchase_product.amount,0)) AS amountSold,
IFNULL(product.amountAvailable-amountSold,~0) AS amountAvailable,
amountAvailable>0 AS isAvailable,
FROM product
LEFT JOIN purchase_product ON purchase_product.product_id = product.id
LEFT JOIN purchase ON purchase.id = purchase_product.purchase_id AND purchase.completed = TRUE
GROUP BY product.id
但这失败了,因为我不能重复使用“amountSold”和“amountAvailable”。这让我可以选择是重复计算还是使用子查询(/加入 SELECT 的/使用更多视图)。
这是我能想到的最合理的妥协是在小提琴中。有没有更优雅的解决方案?