我正在尝试从另一个(t1)中的值更新表(t2)。 t1对同一个键有多个值,我希望t2得到每个键的 last 值。问题是我得到每个键的第一个值。
这是一个简化的架构:
Table t1
+--------+-----------+
| key | value |
| A | 1 |
| B | 5 |
| B | 6 |
| C | 2 |
+--------+-----------+
Table t2
+--------+-----------+-----------+
| key | value | col |
| A | null | xxx |
| B | null | yyy |
| C | null | zzz |
+--------+-----------+-----------+
我的更新查询:
`UPDATE t2 INNER JOIN t1 on t2.key = t1.key SET t2.value = t1.value`
结果我得到了:
Table t2
+--------+-----------+-----------+
| key | value | col |
| A | 1 | xxx |
| B | 5 | yyy |
| C | 2 | zzz |
+--------+-----------+-----------+
我想要的结果:
Table t2
+--------+-----------+-----------+
| key | value | col |
| A | 1 | xxx |
| B | 6 | yyy |
| C | 2 | zzz |
+--------+-----------+-----------+
唯一的区别是我想拥有密钥B的最后一个值,所以 6 而不是 5 。
我知道不可能在一个带有JOINS的UPDATE中放置ORDER BY,而且我没有任何列来订购t1表(我可以在t1中创建一个自动增量列并在此列中创建ORDER BY DESC )。
我如何实现目标? 谢谢!
答案 0 :(得分:0)
如果t1中每个键的最后一个值(总是)是该键的最高值,则可以使用MAX
:
UPDATE t2 INNER JOIN t1 on t2.key = t1.key SET t2.value = (SELECT MAX(t1.value) FROM t1 WHERE t2.key = t1.key)