MySQL: заменить значения столбца на значения в новой таблице, которые являются ближайшими - PullRequest
3 голосов
/ 04 февраля 2011

У меня есть две таблицы примерно так:

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. Поэтому мне нужно получить ближайшее значение (в километрах) и использовать его глубину при замене.

Iнадеялся на один оператор SQL, чтобы добиться этого.Просто прямая замена будет выглядеть так:

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

Как я могу адаптировать это, чтобы получить ближайшее значение?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2011

Это просто и делает то, что вы хотите:

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 |
+----+------------+-------+
0 голосов
/ 04 февраля 2011
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;

Примечание: tbl1 и tbl2 - это два имени таблицы. X - это псевдоним, данный подзапросу, который определяет наиболее близкое совпадение для tbl1.id. tbl2id - это id из таблицы tbl2, ближайший к каждому tbl1.id с псевдонимом в подзапросе.

...