いくつかの割引が適用される可能性があるため、mysql がショップアイテムに対して最も具体的な割引を返すようにしようとしています。私のテーブルとデータは次のとおりです(関係のない列は省略されています):
Item
itemId brand supplier price
====== ===== ======== =====
Item1 Brand1 Supply1 100
Item2 Brand2 Supply1 100
Item3 Brand3 Supply1 100
Item4 Brand4 Supply2 100
Discount
discountId itemId brand supplier discountPrice
========== ====== ====== ======== =============
Discount1 (null) (null) Supply1 80
Discount2 (null) Brand2 Supply1 60
Discount3 Item3 (null) (null) 40
そして、クエリの期待される出力は次のようになります
itemId price discountPrice
===================================
Item1 100 80
Item2 100 60
Item3 100 40
Item4 100 (null)
ご覧のとおり、私のルールは
- サプライヤの割引は具体的ではありません
- サプライヤー+ブランドの割引はより具体的です
- ItemId 割引が最も具体的です
ただし、句との通常の左結合では、最も具体的な割引ではなく、すべての組み合わせが返されます。どうすればこれを達成できますか?
select item.itemId, item.price, discount.discountPrice from item left join discount on (item.itemId = discount.itemId) or (item.brand = discount.brand and item.supplier = discount.supplier) or (item.supplier = discount.supplier AND discount.brand IS NULL)