sql >> データベース >  >> RDS >> Oracle

Ora-01427の単一行サブクエリがselectで複数の行を返す問題を修正するにはどうすればよいですか?

    次のクエリを使用します:

    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
    

    秘訣は、集計関数を追加して、内部クエリが1つのレコードのみを返すようにすることです(ここではmax()を使用しました)。これはクエリに関する限り完全に機能しますが、正直なところ、OPはデータを調べて、内部クエリが複数のレコードを返す理由を調査する必要があります。これらの複数のレコードは、ビジネス上本当に関連性がありますか?



    1. MySQLEnterpriseMonitorを使用したデータベースの監視

    2. SQL転置行を列として

    3. T-SQLを使用して「サーバーがRPC用に構成されていない」メッセージ7411を修正する方法

    4. SQLServerバックアップチェック