mysql用另一行的值更新行

时间:2018-02-04 16:52:58

标签: mysql sql

我对mysql并不是特别新手,但我是新手来更新非常大的表。 我可以在使用两个查询时执行此操作,但我正在尝试使该过程更快,因为我将最终为数百万行执行此操作。 我一直在尝试根据同一个表中的另一行更新表。我看到的表格如下:

table

基本上我想做的是使用相同'callid'的'dialed_num'字段更新'prev_num_dialed'字段,但是来自之前的'segment'。

所以第一行callid'1',segment'1'不会更新'prev_num_dialed',因为之前没有段。 然而,第二行callid'1',segment'2'会将'prev_num_dialed'更新为'1234567',因为这是之前的段号。

我目前的尝试如下:

$query = "UPDATE " . $table_name . " as t1 
SET t1.prev_num_dialed = (
SELECT dialed_num, callid
FROM (SELECT * FROM " . $table_name . ") as t2
WHERE t2.segment = t1.segment - 1)
AND t2.callid = t1.callid
";

但这不是我想要的,它是从它自己的行更新。对此有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

我只是建议:

UPDATE $table_name t1 JOIN
       $table_name t2
       ON t2.callid = t1.callid AND
          t2.segment = t1.segment - 1
    SET t1.prev_num_dialed = t2.dialed_num;

我认为这符合您的意图。如果没有匹配,将列值设置为NULL。您可以使用LEFT JOIN代替JOIN