我对mysql并不是特别新手,但我是新手来更新非常大的表。 我可以在使用两个查询时执行此操作,但我正在尝试使该过程更快,因为我将最终为数百万行执行此操作。 我一直在尝试根据同一个表中的另一行更新表。我看到的表格如下:
基本上我想做的是使用相同'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
";
但这不是我想要的,它是从它自己的行更新。对此有任何帮助表示赞赏。
答案 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
。