Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak naprawić jednowierszowe podzapytanie Ora-01427 zwraca więcej niż jeden wiersz w zaznaczeniu?

Użyj następującego zapytania:

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

Sztuczka polega na tym, aby zmusić wewnętrzne zapytanie do zwrócenia tylko jednego rekordu przez dodanie funkcji agregującej (użyłem tutaj max()). Będzie to działać doskonale, jeśli chodzi o zapytanie, ale szczerze mówiąc, OP powinien zbadać, dlaczego wewnętrzne zapytanie zwraca wiele rekordów, sprawdzając dane. Czy te liczne rekordy są naprawdę istotne z punktu widzenia biznesowego?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle CLOB nie może wstawić więcej niż 4000 znaków?

  2. Wstawianie do Oracle i pobieranie wygenerowanego identyfikatora sekwencji

  3. Oracle:zapytanie SQL, które zwraca wiersze zawierające tylko wartości liczbowe

  4. Oracle SID i nazwa usługi; problemy z połączeniem

  5. Limit czasu dla metody OracleDataReader.Read