MySQL - 更新加入自然顺序

时间:2014-06-19 09:51:58

标签: mysql sql join

我正在尝试从另一个(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 )。

我如何实现目标? 谢谢!

1 个答案:

答案 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)