2017-03-12 7 views
0

これをpostgreSQLで実行するには何が変わる必要がありますか?これを変更してpostgresqlで実行するにはどうすればよいですか?

私はSQLの一部を与えられた

UPDATE ACC 
SET ACC.ACC_EC = SITESmin.ACC_EC, 
    ACC.ACC_NC = SITESmin.ACC_NC 
FROM ACC 
     INNER JOIN LATERAL (SELECT TOP 1 
           * 
         FROM  SITES 
         ORDER BY (acc_ec - site_etg) * (acc_ec - site_etg) + (acc_ncb - site_ntg) * (acc_ncb - site_ntg) 
       ) SITESmin; 

それは、SETを使用しているようだが、なぜ私にはわからないので、それが必要でなければ、それをドロップします。 私は距離を動作させるためにpostgresqlを取得しようとしています。ファイル1のすべてのレコードについて、ファイル2の3300レコードと比較し、最も近いものを選択する必要があります。受け取った知恵は、3300の配列ソリューションを示唆していますが、私はそれを行う方法がわかりません。おそらくそれはSQLの「サブクエリ」です。

サンプルをアップロードすることが許可されている場合、私はこれを許可しますが、これは許可されていないと感じていますか?ここで

は、提出された名前

public.acc.Location_Easting_OSGR 
public.acc.Location_Northing_OSGR 
"public"."Sites"."SITE_ETG" 
"public"."Sites"."SITE_NTG" 
+0

'sのを再現するために作るためにスキーマといくつかのデータを提供してください

WITH SITESmin as ( SELECT ACC_EC, ACC_NC FROM SITES ORDER BY (acc_ec - site_etg) * (acc_ec - site_etg) + (acc_ncb - site_ntg) * (acc_ncb - site_ntg) LIMIT 1 ) UPDATE ACC SET ACC.ACC_EC = SITESmin.ACC_EC, ACC.ACC_NC = SITESmin.ACC_EC FROM SITESmin; 

を/ ACC INNER JOIN LATERAL // ' – wildplasser

+0

そして、サブクエリの最上部にある' TOP 1'を一番下の 'LIMIT 1 'に置き換えます。そして: 'acc_ec - site_etg ...'などにいくつかの範囲テーブル修飾子を追加して、他の人が理解できるようにします。 – wildplasser

答えて

0

あるこのお試しください:それは動作しない場合は、それが簡単に

+0

Gabさん、遅れて申し訳ありません、すべてを再構築しなければならなかったので、私は自分のcsvファイルをインポートするのに苦労しています。 – Anthony500

+0

それはうまくいったのですか? – Gab

+0

私はopを編集します – Anthony500

関連する問題