sql >> Database teknologi >  >> RDS >> Oracle

Hvordan rettes Ora-01427 enkeltrækkes underforespørgsel returnerer mere end én række i udvalgte?

Brug følgende forespørgsel:

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

Tricket er at tvinge den indre forespørgsel til kun at returnere én post ved at tilføje en aggregeret funktion (jeg har brugt max() her). Dette vil fungere perfekt for så vidt angår forespørgslen, men ærligt talt, OP bør undersøge, hvorfor den indre forespørgsel returnerer flere poster ved at undersøge dataene. Er disse flere optegnelser virkelig relevante forretningsmæssigt?



  1. PRAGMA table_list i SQLite

  2. Forbind ODBC-applikationer på Windows til SugarCRM

  3. Alfanumerisk sortering med PostgreSQL

  4. Hvad er nyt i MariaDB Server 10.5?