データベースに少量のロジックを含むビューを作成したいと考えています。商品の在庫確認のためです。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」と「mountAvailable」を再利用できないため、これは失敗します。これにより、計算を繰り返すか、サブクエリを使用するか (/SELECT に結合する/より多くのビューを使用する) のいずれかを選択できます。
これは、私が思いついた最も合理的な妥協案であり、Fiddle にあります。もっと優雅な解決策はありますか?