我有一个
commission_rates
表,其中包含以下数据:
id | 亲切 | 率 | 商户id | publisher_id |
---|---|---|---|---|
1 | 标准 | 0.15 | 1 | 空 |
2 | 标准 | 0.15 | 2 | 空 |
3 | 重复客户 | 0.1 | 3 | 空 |
4 | 定制 | 0.5 | 3 | 408 |
5 | 标准 | 0.08 | 3 | 空 |
其中
publisher_id
为 null
的行表示此费率适用于所有发布商。因此,如果我的发布商 ID 为 10,并且我想查看该发布商适用的佣金结果集,它将返回第 1、2、3 和 5 行,即不是第 4 行,因为该行是针对发布商 ID 的费率自定义408.
这个想法是避免为每个商家<>发布者关系明确定义费率。每个发布商 <> 商家的费率 99% 相同,但对于一些定制,两方之间商定了不同的费率。因此,
null
列中的 publisher_id
值意味着这是用于 所有 发布商的费率。
其中
publisher_id
不是 null
的行表示该发布商为商家提供了自定义费率。
例如,第 4 行具有发布商 408 的
custom
费率。如果我们查询发布商 408,则第 4 行应返回所有发布商的 standard
费率(第 5 行)。因此对发布者 408 的查询将返回:
亲切 | 率 | 商户id | publisher_id | |
---|---|---|---|---|
标准 | 0.15 | 1 | ||
标准 | 0.15 | 2 | ||
重复客户 | 0.1 | 3 | ||
定制 | 0.5 | 3 | 408 |
亲切 | 率 | 商户id | publisher_id | |
---|---|---|---|---|
标准 | 0.15 | 1 | ||
标准 | 0.15 | 2 | ||
重复客户 | 0.1 | 3 | ||
标准 | 0.08 | 3 |
SELECT *
FROM commission_rates outer
WHERE kind <> 'standard'
OR publisher_id = 408
OR publisher_id IS NULL AND NOT EXISTS(
SELECT *
FROM commission_rates inner
WHERE outer.merchant_id = inner.merchant_id
AND inner.publisher_id = 408
);