更新矩阵表 Postgres

时间:2021-06-26 07:47:59

标签: sql postgresql matrix

我有一个表格距离,它是一个矩阵。

持有:开始,结束,成本。 对于每个开始结束,都有一个对应物:结束开始。

问题是对应零件的成本不相等。

我想更正这个问题,并且正在使用以下 SQL:

WITH subquery AS (
    SELECT start, end, cost
    FROM  distance
)
UPDATE distance
SET cost = subquery.cost
    
FROM subquery
WHERE distance.start = subquery.end 
AND distance.cost <> subquery.cost;

此查询现在运行了 10 多个小时。 我怀疑它是否能让我得到结果。

有没有更好的办法? 我不在乎成本是来自起点-终点对还是终点-起点对。 它们只需要相同即可。

使用 Postgres 12。 该表包含大约 170.000.000 条记录。

1 个答案:

答案 0 :(得分:1)

您定义对的逻辑已关闭。您只查看一列而不是两列。您当前的查询不会执行您想要的操作。杀了它。

第二点是你只需要更新一对中的一行。因此,任意选择“升序”行(开始<结束)或“降序”行(开始>结束)进行更新,但不能同时选择两者。以下更新降序行:

UPDATE distance d
    SET cost = d2.cost
    FROM distance d2
    WHERE d2.start = d.end AND
          d2.end = d.start AND
----------^ the missing condition in your query
          d2.start > d.end AND
----------^ the "descending" condition
          d2.cost <> d.cost;