我有一张表,上面有东西的关税;在这种情况下,关税表并不重要,“关税值”很重要。在此演示 SQL Fiddle 中,tariff_plan是tariffplans表的 FK (未包含在示例中)。每个“东西”的关税是tariff_type(出于演示目的简化为一个简单的字符)。
例如,我有一个默认的关税计划(key = default);这是适用于每个客户的资费,除非为该客户定义了另一个值tariff_type。为客户分配了关税计划(plan_x在我的示例中为键 = )。
如果有定义项目的关税a,b,c并且d在默认的计划。在 plan_x 中,我为a和定义了“覆盖”值c。
所以,我做的是我选择default计划(化名p低于p rimary)和左加入“覆盖”计划(plan_x)把它(别名s下面小号econdary):
select *
from tariff_values as p
left outer join tariff_values s
on (p.tariff_type = s.tariff_type) and (s.tariff_plan = 'plan_x')
where (p.tariff_plan = 'default')
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这导致:
id tariff_plan …Run Code Online (Sandbox Code Playgroud)