ここで他の場所で説明されているように、ANSIスタイルの結合を使用すると、この種の操作ははるかに簡単になります。
それでも、LEFT JOIN
を実行したいので、少し注意が必要です。 INNER JOIN
へのユーザーリスト HR_DOCUMENTS_OF_RECORD
の間 およびHR_DOCUMENT_TYPES_VL
。つまり、各人に対して、「セキュリティクリアランスレポート」タイプの記録文書が存在する場合はそれが必要です。
その方法は次のとおりです。
SELECT papf.person_id
, (ppnf.first_name||' '||ppnf.last_name) e_name
, dor.document_name
, dor_type.document_type
, TO_CHAR(dor.creation_date, 'DD/MM/YYYY') dor_issue_date
FROM per_all_people_f papf
INNER JOIN per_person_names_f ppnf ON ppnf.person_id = papf.person_id
AND ppnf.name_type = 'GLOBAL'
AND SYSDATE BETWEEN ppnf.effective_start_date AND NVL(ppnf.effective_end_date,SYSDATE)
LEFT JOIN ( hr_documents_of_record dor
INNER JOIN hr_document_types_vl dor_type ON dor_type.document_type_id = dor.document_type_id
AND dor_type.document_type = 'Security Clearance Report' ) ON dor.person_id = papf.person_id
WHERE SYSDATE BETWEEN papf.effective_start_date AND NVL(papf.effective_end_date,SYSDATE)
ORDER BY e_name DESC;
INNER JOIN
に注意してください DOR
の間 およびDOR_TYPE
括弧内にあり、LEFT JOIN
状態は後です かっこ。
素朴にLEFT JOIN
する場合 すべての人がセキュリティクリアランスレポート以外の記録文書を持っていると、行が多すぎます。