3

次のような2つのテーブルがあります。

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 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 に答える
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は 2 つのテーブル名です。Xごとに最も近い一致を決定するサブクエリに与えられるエイリアスtbl1.idです。サブクエリでエイリアス化された、each に最も近い from tbl2 ですtbl2ididtbl1.id

于 2011-02-04T07:51:35.757 に答える