Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

मुझे Oracle sdo_nn अद्यतन वाक्य में केवल एक अद्वितीय परिणाम चाहिए,

जाहिर है, आप (सरलीकृत) नहीं कर सकते

set t1.fieldA = (t2.fieldB, distance)  --> you want to put two values into a single column

इसलिए, fieldB get प्राप्त करें केवल उपश्रेणी से जो विश्लेषणात्मक कार्य का उपयोग करती है (row_number ) पंक्तियों को sdo_nn_distance(1) desc . द्वारा "क्रमबद्ध" करने के लिए; फिर पहली पंक्ति का fieldB . प्राप्त करें मूल्य।

कुछ इस तरह (मुझे आशा है कि मैंने कोष्ठक को सही रखा है):

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);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक ही टेबल में रिकॉर्ड डालने के लिए INSERT ट्रिगर

  2. Oracle उदाहरण में थोक संग्रह का चयन करें

  3. Oracle संग्रहित प्रक्रिया में त्रुटि कोड का वापसी संदेश

  4. ओरेकल pl/sql में एक्सएमएल पार्सिंग

  5. Oracle में एक कॉलम में सभी गैर-संख्यात्मक मान खोजें