我希望用与同一代码匹配的表2的任何不同值更新表1,无论是哪一个或顺序(表2中的值不能被多次选取)
+-------------------+ +--------------+
| table1 | | table2 |
+-------------------+ +--------------+
| id | code | value | | code | value |
+----+------+-------+ +------+-------+
| 1 | A | | <-- | A | v1 |
| 2 | A | | | B | v2 |
| 3 | B | | | A | v3 |
+----+------+-------+ | A | v5 |
| A | v6 |
+------+-------+
+-------------------+
| table1 |
+-------------------+
| id | code | value |
+----+------+-------+
| 1 | A | v6 |
| 2 | A | v3 |
| 3 | B | v2 |
+----+------+-------+
如何编写sql update语句(mysql(5.7版)
4条答案
按热度按时间rbpvctlc1#
这需要
Row_Number()
窗口功能的魔力!不幸的是,您的mysql版本是5.7;因此,使用用户定义变量的更详细的解决方案如下:你可以在这个答案中查看类似技巧的解释。
kzipqqlq2#
madhur bhaiya提供的声明在以下情况下确实有效:
@rn被初始化为1而不是0(否则行\u num被编号为1两次)
从表2中选择是不同的(因为(代码、值)对在表2中重复)
声明应该是
r7s23pms3#
使用join,因为顺序无关紧要,所以我认为您的示例输出可以更改
gev0vcfq4#
使用over函数应该可以:
查询示例:
更新状态: