SQL 查询在单个查询中获取分层配置表的最终数据

问题描述 投票:0回答:1

我有两个表,即 config_attr 和 config。我正在使用 MySQL 8.0.32。

config_attr -> 该表包含属性名称及其默认值。 config -> 该表已覆盖特定客户端的 config_attr 中存在的任何属性或当前值。

下面是两个表的示例结构

CREATE TABLE config_attr (
   id INT,
   name VARCHAR,
   value VARCHAR,
   PRIMARY KEY (id)
);

CREATE TABLE config (
   id INT,
   clientId INT,
   configAttrId INT,
   value VARCHAR,
   PRIMARY KEY (id),
   FOREIGN KEY (configAttrId) REFERENCES config_attr(id)
);

目前我正在使用单独的查询单独获取数据,然后使用代码覆盖默认值。

但是,我想探索是否有其他方法可以在单个查询中获取最终的覆盖数据。

下面是一个例子:

配置属性

id 名字 价值
1 n1 v1
2 n2 v2

配置

配置属性 客户端ID 价值
1 10 v3

客户端 10 的预期查询输出:

名字 价值
n1 v3
n2 v2
java sql mysql database query-optimization
1个回答
0
投票

尝试用左连接合并

SELECT 
    ca.name,
    COALESCE(c.value, ca.value) AS value
FROM 
    config_attr ca
LEFT JOIN 
    config c ON ca.id = c.configAttrId AND c.clientId = 10;
© www.soinside.com 2019 - 2024. All rights reserved.