2017-03-12 40 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; 

這似乎是使用設置,但我不知道爲什麼,因此,如果不需要的話刪除它。 我想讓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

單曲/ ACC INNER JOIN LATERAL //' – wildplasser

+0

並用底部的「LIMIT 1」替換子查詢頂部的「TOP 1」。並且:爲'... acc_ec - site_etg ...'等添加一些範圍表限定符,使其他人可以理解查詢。 – wildplasser

回答

0

試試這個:

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; 

如果它不能正常工作,請提供模式和一些數據,使其更容易複製

+0

謝謝Gab,對於我的延遲感到抱歉,不得不重建所有內容,並且由於「時間戳」格式問題導致我無法導入我的csv文件,這些問題阻止了我。 – Anthony500

+0

它結束了工作嗎? – Gab

+0

我將編輯op – Anthony500