Tシャツなどのすべての商品を保持するテーブルproducts
と、関連する色のバリエーションを持つproduct_variants
があります。黒、青、緑の各列には、株式の数を保持するstock
列があります。複数行の列値のSELECTのMySQL-IF
完全に売り切れている製品とそうでない製品のどちらを教えてくれるのかという質問を作成したいと思います。
stock
の列は0でなければなりませんが、NULL
または> 0
の場合は在庫があります。 NULL
は、無制限の数量がある場合に使用されます。
これは次の結果である私が取得したいと思います:
私はやってみました何product_id|soldOut|stock
------------------
1 |Yes |0
2 |Yes |0
3 |No |NULL
4 |No |1
、次のとおりである。
- グラブすべての製品
- product_variantsに参加してください
- グループごとに1つの結果のみを表示するproduct_id
- 選択PRODUCT_IDと
IF(stock > 0 OR stock IS NULL, 'No', 'Yes') as SoldOUt
問合せ:
SELECT p.product_id, IF(pv.stock > 0 OR pv.stock IS NULL, 'No', 'Yes') as SoldOUt
FROM products p
JOIN product_variants pv ON (`pv`.`product_id` = `p`.`product_id`)
GROUP BY p.product_id
結果soldOut
が正しくないということです - それはちょうど変種のランダムな行を取り、これのstock
を確認するように思えるし、答え。
代わりに、すべてのバリアント行をチェックして、いずれかがまだsellOut(上記のifステートメントを使用していない)かどうかを確認し、その製品の最終回答を1つ返す必要があります。
私は何が間違っていますか?どのようにこれを達成できますか?
ありがとうございました!思う新しい方法を与えてくれた。 – Karem