web-dev-qa-db-ja.com

条件が存在する場合、テーブル内の複数の行を別のテーブルから更新します

私は2つのテーブルを持っています。

Table1the_geomという列に緯度/経度座標で地理参照されている会社が含まれています

Table2には、地理参照されていないTable1の同じ会社と、住所が地理参照されている他の何百もの会社も含まれています。

私がする必要があるのは、表1企業のthe_geom lat/lng値を表2の対応するエントリに挿入することだけです。これらの挿入の基礎となる一般的な分母は、address列です。

簡単な質問ですが、SQLを使用することはめったにありません。

11
John

それを仮定して

「the_geom」緯度/経度値を挿入します

実際には、table2の既存の行をupdateすることを意味します。

UPDATE table2 t2
SET    the_geom = t1.the_geom
FROM   table1 t1
WHERE  t2.address = t1.address
AND    t2.the_geom IS DISTINCT FROM t1.the_geom; -- avoid empty updates

また、address列にUNIQUE値があると仮定します。
優れたマニュアルのUPDATEに関する詳細 ここ

23

あなたが(私のような)mysqlユーザーであり、上記のスクリプトが機能しない場合、これはmysqlに相当するものです。

UPDATE table2 t2, table1 t1
SET    the_geom = t1.the_geom
WHERE  t2.address = t1.address
AND    t2.the_geom <> t1.the_geom; -- avoid empty updates

OPへのすべてのクレジット。

5
Jay

同様の問題が発生しましたが、上記の解決策を試したところ、次のようなエラーが発生しました

't2'付近の構文が正しくありません

私のために働いたコードは次のとおりです。

UPDATE table2
SET the_geom = t1.the_geom
FROM table1 as t1
WHERE table2.address = t1.address AND table2.the_geom <> t1.the_geom

私の答えが5年遅れていることは知っていますが、これがこの解決策を見つけることができなかった私のような誰かに役立つことを願っています。

2
levkaster