我有两个表,即 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 |
尝试用左连接合并
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;