node1 と node2 はノードテーブルにリンクする整数の外部キーであり、あなたが言及したテーブルはエッジテーブルだと思いますか?
エッジ テーブルが次のようなもので作成されていると仮定します。
CREATE TABLE edges( node1 INTEGER, node2 INTEGER, weight REAL );
次のようなものはどうですか (自己アークがなく、a->b からのリンクごとに b->a からのリンクもあると仮定します):
CREATE TABLE newedges( node1 INTEGER, node2 INTEGER, weight1 REAL, weight2 REAL );
INSERT INTO newedges
SELECT e1.node1, e1.node2, e1.weight, e2.weight
FROM edges AS e1 INNER JOIN edges AS e2
ON e1.node1=e2.node2 AND e1.node2=e2.node1
WHERE e1.node1 < e1.node2;
自己結合は前後のエッジを照合し、e1.node1 が e1.node2 より小さいという要件により、照合された各エッジが 1 回だけ表示されることが保証されます。
後ろ向きのエッジがない場合にゼロを埋める要求に応じて編集します。
後方エッジが欠落している場合は、LEFT JOIN を実行し、CASE ステートメントを使用してギャップをゼロで埋めることができます。
INSERT INTO newedges
SELECT
e1.node1,
e1.node2,
e1.weight,
CASE WHEN e2.weight IS NULL THEN 0.0 ELSE e2.weight END
FROM edges AS e1 LEFT JOIN edges AS e2
ON e1.node1=e2.node2 AND e1.node2=e2.node1
WHERE e1.node1 < e1.node2;
それが役立つことを願っています!