不确定包含背景的内容 - 使用带有InnoDB的MySQL / MariaDB并与python混合使用。
我有一些非常庞大的表格,除此之外,它们有3个数字列,让我们说A,B& C.是否有一种有效的方法来更新每一行,使A,B和C中的数字增加(或减少)顺序?
E.g。截至目前:
+----+------------+-----+-----+-----+
| ID | Other data | A | B | C |
+----+------------+-----+-----+-----+
| 1 | Something | 2.0 | 1.3 | 1.0 |
| 2 | Something | 1.0 | 3.0 | 2.0 |
| 3 | Something | 1.0 | 3.0 | 1.0 |
+----+------------+-----+-----+-----+
希望如此:
+----+------------+-----+-----+-----+
| ID | Other data | A | B | C |
+----+------------+-----+-----+-----+
| 1 | Something | 1.0 | 1.3 | 2.0 |
| 2 | Something | 1.0 | 2.0 | 3.0 |
| 3 | Something | 1.0 | 1.0 | 3.0 |
+----+------------+-----+-----+-----+
答案 0 :(得分:0)
有效的解决方案?您需要对所有行执行update
,这样效率不高。
如果您只有三列,那么如果值完全不同,则可以使用简单的case
逻辑:
select id, . . .,
least(a, b, c) as a,
(case when a not in (least(a, b, c), greatest(a, b, c)) then a
when b not in (least(a, b, c), greatest(a, b, c)) then b
else c
end) as b,
greatest(a, b, c) as b
from t;
如果您有重复项或NULL
值,逻辑会变得复杂一些,但可以调整类似的东西。如果你有超过3列,它会变得更加麻烦。
这很容易适应更新。如果你真的想将它们存储在一个表中,我会使用create table as
将它们放在另一个表中。 Insert
的速度比update
的大量{。}}快。