我有一个表格距离,它是一个矩阵。
持有:开始,结束,成本。 对于每个开始结束,都有一个对应物:结束开始。
问题是对应零件的成本不相等。
我想更正这个问题,并且正在使用以下 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 条记录。
答案 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;