MySql 查询 - 如果 table 两个 table 具有相同的数据,select 来自更重要的 table

MySql query - If table two tables have same data, select from more important table

我有三个table

规则,default_client_rules 和 client_rules

Rules 包含所有规则的列表、它们的名称、参数等。

default_client_rules 有一个适用于所有用户的规则列表。 Table:

`id`, `rule_id`, `num_required`

用户还可以创建自己的规则存储在client_rules。

`id`, `rule_id, `num_required`

用户可以创建自己的规则来覆盖默认规则,因此在我的 table 中我可能有:

default_client_rules 2130

client_rules 731

客户端规则优先于默认客户端规则table。我想写一个查询来显示所有规则。我遇到的问题是,在上面的场景中,当 client_rules 中有一个条目与 default_client_rules 中的规则相同时,我只想 select client_rules条目。

这样的事情可能会奏效。它基本上对客户端规则进行左连接,假设始终存在默认规则。它会检查 client_rule.rule_id 是否为空。如果为空,则使用默认值,否则使用客户端规则值。

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

这里是fiddle.