同一 table 一个查询的 MySQL 中的多个更新
Multiple updates in MySQL for same table one query
有没有办法在 MySQL 的单个查询中一次更新多行?现在我对每个条件有 4 个查询。我想将以下所有更新合并到一个性能最佳的查询中。
UPDATE rates SET timestamp = 1643655901, bnb = 'value1', eth = 'value2', usdc = 'value3' WHERE base = 'btc';
UPDATE rates SET timestamp = 1643655901, bnb = 'value4', btc = 'value5', usdc = 'value6' WHERE base = 'eth';
UPDATE rates SET timestamp = 1643655901, eth = 'value7', btc = 'value8', usdc = 'value9' WHERE base = 'bnb';
UPDATE rates SET timestamp = 1643655901, bnb = 'value10', btc = 'value11', eth = 'value12' WHERE base = 'usdc';
timestamp
任何查询的字段都可以相同
value1 - value12
基于不同变量的动态数据
我正在研究类似问题的其他答案,但无法构建查询,感谢您的帮助。
您可以按照以下方式构造 case 表达式 以组合成单个更新(当然未经测试)
update rates set
timestamp = 1643655901,
bnb = case base
when 'btc' then 'value1'
when 'eth' then 'value4'
when 'bnb' then 'value7'
else 'value10' end,
etc = case base
when 'btc' then 'value2'
when 'eth' then 'value5'
when 'bnb' then 'value8'
else 'value11' end,
usdc = case base
when 'btc' then 'value3'
when 'eth' then 'value6'
when 'bnb' then 'value9'
else 'value12' end
where base in ('btc', 'eth', 'bnb', 'usdc');
有没有办法在 MySQL 的单个查询中一次更新多行?现在我对每个条件有 4 个查询。我想将以下所有更新合并到一个性能最佳的查询中。
UPDATE rates SET timestamp = 1643655901, bnb = 'value1', eth = 'value2', usdc = 'value3' WHERE base = 'btc';
UPDATE rates SET timestamp = 1643655901, bnb = 'value4', btc = 'value5', usdc = 'value6' WHERE base = 'eth';
UPDATE rates SET timestamp = 1643655901, eth = 'value7', btc = 'value8', usdc = 'value9' WHERE base = 'bnb';
UPDATE rates SET timestamp = 1643655901, bnb = 'value10', btc = 'value11', eth = 'value12' WHERE base = 'usdc';
timestamp
任何查询的字段都可以相同
value1 - value12
基于不同变量的动态数据
我正在研究类似问题的其他答案,但无法构建查询,感谢您的帮助。
您可以按照以下方式构造 case 表达式 以组合成单个更新(当然未经测试)
update rates set
timestamp = 1643655901,
bnb = case base
when 'btc' then 'value1'
when 'eth' then 'value4'
when 'bnb' then 'value7'
else 'value10' end,
etc = case base
when 'btc' then 'value2'
when 'eth' then 'value5'
when 'bnb' then 'value8'
else 'value11' end,
usdc = case base
when 'btc' then 'value3'
when 'eth' then 'value6'
when 'bnb' then 'value9'
else 'value12' end
where base in ('btc', 'eth', 'bnb', 'usdc');