Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tôi chỉ cần một kết quả duy nhất trong câu Cập nhật sdo_nn của Oracle,

Rõ ràng là bạn không thể (đơn giản hóa)

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

Do đó, hãy lấy fieldB một mình từ truy vấn con sử dụng hàm phân tích (row_number ) để "sắp xếp" các hàng theo sdo_nn_distance(1) desc; sau đó lấy fieldB của hàng đầu tiên giá trị.

Một cái gì đó như thế này (Tôi hy vọng tôi đặt đúng dấu ngoặc đơn):

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. Maven Cảnh báo chết người:protocol_version

  2. Tại sao Oracle không cho bạn biết BẰNG bảng hoặc khung nhìn nào không tồn tại?

  3. Kiểu dữ liệu số hiển thị là # trong SQL Plus

  4. Chèn CLOB bằng cx_Oracle

  5. Lỗi SQL - thiếu từ khóa