我有两张这样的桌子:
Table1 (ID, Kilometers, Depth)
Table2 (ID, Kilometers, Depth)

Sample Data:
Table 1
1, 0.001, 10
2, 0.002, 11
3, 0.003, 11

Table 2
1, 0.001, 10
2, 0.003, 12
3, 0.004, 15

我需要将表1中的深度替换为表2中的深度,根据其千米值。
但是,表2中可能没有表1中每个人的公里值。所以我需要得到最接近的值(以公里为单位)并在替换中使用它的深度。
我希望只有一个SQL语句可以实现这一点。
直接替换就是:
UPDATE T1, T2 SET T1.Depth = T2.Depth WHERE T1.Kilometers = T2.Kilometers

我有什么办法可以调整这个以获得最接近的值?

最佳答案

这很简单,而且可以满足您的需要:

UPDATE table1 SET depth = (
     SELECT depth FROM table2
     ORDER BY (ABS(table1.kilometers-table2.kilometers)) ASC
     LIMIT 1
);

-- Query OK, 2 rows affected (0.00 sec)

mysql> select * from table1;
+----+------------+-------+
| id | kilometers | depth |
+----+------------+-------+
|  1 |      0.001 |    10 |
|  2 |      0.002 |    10 |
|  3 |      0.003 |    12 |
+----+------------+-------+

关于mysql - MySQL:将列的值替换为新表中最接近的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4895599/

10-16 15:36