これはややこしいように聞こえますが、考え方は非常に単純です。
デフォルトのレートがある製品のリストを取得したいのですが、特定の「エージェント」にはレートがありません。そのためには、下の表から選択する必要があります
t_Products
|-ProductID-|--Product-|
| 100 | Product1 |
| 101 | Product2 |
| 102 | product3 |
| 103 | product4 |
ID が t_Annual_DefaultCost または t_Daily_DefaultCost のいずれかに存在する場合
t_Annual_DefaultCost
|-DefaultID-|-ProductID-|--Cost-|
| 100 | 100 | 24.00 |
| 101 | 101 | 26.00 |
t_Daily_DefaultCost
|-DefaultID-|-ProductID-|--Cost-|-Days-|
| 100 | 100 | 24.00 | 1 |
| 101 | 100 | 26.00 | 2 |
| 102 | 102 | 22.50 | 2 |
| 103 | 102 | 97.50 | 8 |
ただし、指定されたエージェント ID の t_Annual_AgentCost または t_Daily_AgentCost に存在することはできません
t_Annual_AgentCost
|---CostID--|-ProductID-|-AgentID-|--Cost-|
| 100 | 100 | 10001 | 24.00 |
| 101 | 100 | 10001 | 20.00 |
t_Daily_AgentCost
|---CostID--|-ProductID-|-AgentID-|--Cost-|-Days-|
| 100 | 100 | 10001 | 24.00 | 1 |
| 102 | 102 | 10002 | 35.00 | 2 |
したがって、AgentID 10001 の場合、最終結果は次のようになります。
|-ProductID-|--Product-|
| 101 | product2 |
| 102 | product3 |
AgentID 10002 の場合、最終結果は次のようになります。
|-ProductID-|--Product-|
| 100 | product1 |
| 101 | product2 |
現在、以下のコードを使用して、デフォルト レートを持つ製品のリストを取得しています。しかし、AgentCost テーブルにもあるものを削除する/取得しない方法がわかりません。
Select
distinct a.*
from
t_Products as a
inner join
(
select
DefaultID ,ProductID
from
t_Daily_DefalutCost
union
select
DefaultID , ProductID
from
t_Annual_DefaultCost
)
as b on a.ProductID = b.ProductID