如何更改此内容以在postgresql中运行?

时间:2017-03-12 14:45:41

标签: sql postgresql sql-update

在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" 

1 个答案:

答案 0 :(得分: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;

如果它不起作用,请提供架构和一些数据以便于重现