Oracle11g 我只需要Oracle sdo_nn更新语句中的一个唯一结果,

Oracle11g 我只需要Oracle sdo_nn更新语句中的一个唯一结果,,oracle11g,geospatial,oracle-spatial,Oracle11g,Geospatial,Oracle Spatial,从tableB.Field到tableA.Field,我只需要一个唯一的结果 我使用的是sdo运算符sdo_nn,代码如下: UPDATE table1 t1 SET t1.fieldA = (SELECT T2.fieldB,SDO_NN_DISTANCE(1) distance FROM table1 T1, table2 T2 WHERE (sdo_nn(t1.geometry,t2.geometry,'SDO_NUM_RES=1',1)= 'TRUE') ORDER BY DIST )

从tableB.Field到tableA.Field,我只需要一个唯一的结果 我使用的是sdo运算符sdo_nn,代码如下:

UPDATE table1 t1
SET t1.fieldA = (SELECT T2.fieldB,SDO_NN_DISTANCE(1) distance
FROM table1 T1, table2 T2
WHERE 
(sdo_nn(t1.geometry,t2.geometry,'SDO_NUM_RES=1',1)= 'TRUE')
ORDER BY DIST
)
WHERE EXISTS(
    SELECT 1
      FROM table2 t2
     WHERE sdo_nn(t1.geometry, t2.geometry,'SDO_NUM_RES=1',1)='TRUE'
     AND(t2.cell_name = 'string1' or t2.cell_name = string2')AND t1.fieldA = NULL
     );
在子查询的select语句中,我得到一个错误,因为我只使用了一个字段(t1.fieldA),但在该语句中,我使用了运算符SDO\u NN\u DISTANCE(1),sql开发人员将该运算符与另一个字段一样计数。写这个句子的正确方法是什么?我只使用sql,因为我需要在vba中插入此代码

谢谢

显然,你不能(简化)

因此,从子查询中单独获取
fieldB
,该子查询使用分析函数(
row\u number
)按
sdo\u nn\u距离(1)desc对行进行“排序”;然后获取第一行的
字段b

类似这样的内容(我希望我设置了正确的括号):

set t1.fieldA = (t2.fieldB, distance)  --> you want to put two values into a single column
UPDATE table1 t1
   SET t1.fieldA =
          (SELECT x.fieldB                                 --> only fieldB
             FROM (SELECT T2.fieldB,                       --> from your subquery
                          SDO_NN_DISTANCE (1) distance,
                          ROW_NUMBER ()
                             OVER (ORDER BY sdo_nn_distance (1) DESC) rn
                     FROM table1 T1, table2 T2
                    WHERE (sdo_nn (t1.geometry,
                                   t2.geometry,
                                   'SDO_NUM_RES=1',
                                   1) = 'TRUE')) x
            WHERE rn = 1)                                  --> where RN = 1
 WHERE EXISTS
          (SELECT 1
             FROM table2 t2
            WHERE     sdo_nn (t1.geometry,
                              t2.geometry,
                              'SDO_NUM_RES=1',
                              1) = 'TRUE'
                  AND (   t2.cell_name = 'string1'
                       OR t2.cell_name = 'string2')
                  AND t1.fieldA IS NULL);