MySQL:用最接近的新表中的值替换列的值

标签 mysql sql replace sql-update closest

我有两个这样的表:

表 1(ID、公里、深度)
Table2(ID、公里、深度)

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

我需要根据Kilometers值将表1中的深度替换为表2中的深度。

但是,对于表 1 中的每个人,表 2 中可能没有公里值。因此我需要获取最接近的值(按公里)并在替换中使用它的深度。

我希望通过一条 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:用最接近的新表中的值替换列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895599/

相关文章:

php - Laravel 在连接后计算行数

sql - 编写多个条件时的 Case 的更好方法

c++ - C++上的字符串过滤

css - H1 图片替换备选

java - BoneCP 正在报告未关闭的连接,但我在所有获得新连接的地方都使用 try-with-resource

php - 在 HTML 表中列出 MySQL 数组

sql - 我可以在命名实例上使用 Azure 混合 SQL 连接吗?

visual-studio - 在 Visual Studio 上查找和替换并保留编号

java - 如果作者不存在,则将作者插入表中,但始终返回他的 ID

php - 无法将 docker mysql 数据库连接到 codeigniter 应用程序