3

我有两个这样的表:

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 中的深度。

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

我希望一个单一的 SQL 语句来实现这一点。只是一个直接的替换就像:

UPDATE T1, T2 SET T1.Depth = T2.Depth WHERE T1.Kilometers = T2.Kilometers

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

4

2 回答 2

0
update tbl1
inner join (
    select tbl1.id,
        (
            select id
            from tbl2
            order by abs(tbl2.Kilometers - tbl1.Kilometers) asc
            limit 1
        ) AS tbl2id
    from tbl1
) X
    on tbl1.id = X.id
inner join tbl2
    on tbl2.id = X.tbl2id

set tbl1.depth = tbl2.depth;

注意:tbl1tbl2是两个表名。X是给子查询的别名,用于确定最接近的匹配项tbl1.id。是最接近 eachtbl2id的from tbl2 ,在子查询中具有别名。idtbl1.id

于 2011-02-04T07:51:35.757 回答
0

这很简单,可以满足您的要求:

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 |
+----+------------+-------+
于 2011-02-04T09:51:07.203 回答