Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara memperbaiki subquery baris tunggal Ora-01427 mengembalikan lebih dari satu baris dalam pilihan?

Gunakan kueri berikut:

SELECT E.I_EmpID AS EMPID,
       E.I_EMPCODE AS EMPCODE,
       E.I_EmpName AS EMPNAME,
       REPLACE(TO_CHAR(A.I_REQDATE, 'DD-Mon-YYYY'), ' ', '') AS FROMDATE,
       REPLACE(TO_CHAR(A.I_ENDDATE, 'DD-Mon-YYYY'), ' ', '') AS TODATE,
       TO_CHAR(NOD) AS NOD,
       DECODE(A.I_DURATION,
              'FD',
              'FullDay',
              'FN',
              'ForeNoon',
              'AN',
              'AfterNoon') AS DURATION,
       L.I_LeaveType AS LEAVETYPE,
       REPLACE(TO_CHAR((SELECT max(C.I_WORKDATE)
                         FROM T_COMPENSATION C
                        WHERE C.I_COMPENSATEDDATE = A.I_REQDATE
                          AND C.I_EMPID = A.I_EMPID),
                       'DD-Mon-YYYY'),
               ' ',
               '') AS WORKDATE,
       A.I_REASON AS REASON,
       AP.I_REJECTREASON AS REJECTREASON
  FROM T_LEAVEAPPLY A
 INNER JOIN T_EMPLOYEE_MS E
    ON A.I_EMPID = E.I_EmpID
   AND UPPER(E.I_IsActive) = 'YES'
   AND A.I_STATUS = '1'
 INNER JOIN T_LeaveType_MS L
    ON A.I_LEAVETYPEID = L.I_LEAVETYPEID
  LEFT OUTER JOIN T_APPROVAL AP
    ON A.I_REQDATE = AP.I_REQDATE
   AND A.I_EMPID = AP.I_EMPID
   AND AP.I_APPROVALSTATUS = '1'
 WHERE E.I_EMPID <> '22'
 ORDER BY A.I_REQDATE DESC

Triknya adalah memaksa kueri dalam hanya mengembalikan satu catatan dengan menambahkan fungsi agregat (saya telah menggunakan max() di sini). Ini akan bekerja dengan sempurna sejauh menyangkut kueri, tetapi, sejujurnya, OP harus menyelidiki mengapa kueri dalam mengembalikan banyak catatan dengan memeriksa data. Apakah beberapa catatan ini benar-benar relevan dengan bisnis?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jenis koleksi lokal tidak diperbolehkan dalam pernyataan SQL

  2. Pilih Kumpulkan Massal ke Contoh Oracle

  3. CLEAR SCREEN - Pintasan Pengembang Oracle SQL?

  4. Bagaimana mengantisipasi dan menghindari kutipan tunggal ' di oracle

  5. UID – Kembalikan ID Sesi Saat Ini di Oracle