我有三个表
规则、default_client_rules和client_rules
规则包含所有规则、其名称、参数等的列表。
default_client_rules有一个适用于所有用户的规则列表。桌子:
`id`, `rule_id`, `num_required`
用户还可以创建自己的规则存储在client_rules中。
`id`, `rule_id, `num_required`
用户可以创建自己的规则来覆盖默认规则,因此在我的表中我可能有:
default_client_rules 21
、3
、0
client_rules 7
、3
、1
优先于默认客户端规则表。我想编写一个查询来显示所有规则。我遇到的问题是,在上述情况下,当client_rules中有一个与default_client_rules相同的规则条目时,我只想选择client_rules条目。
这样的事情可能会起作用。它基本上执行客户端规则的左联接,假设始终存在默认规则。它会检查 client_rule.rule_id 是否为 null。如果为 null,则使用默认值,否则使用客户端规则值。
select
dcr.rule_id,
if(isnull(cr.rule_id), dcr.num_required, cr.num_required) as num_required,
if(isnull(cr.rule_id), dcr.id, cr.id) as id
FROM default_client_rules dcr LEFT JOIN client_rules cr
ON dcr.rule_id=cr.rule_id
这是一个小提琴。