Như đã được lưu ý ở những nơi khác ở đây, việc này đơn giản hơn nhiều nếu bạn sử dụng các phép nối kiểu ANSI.
Mặc dù vậy, sẽ hơi phức tạp vì bạn muốn LEFT JOIN
danh sách những người tham gia INNER JOIN
giữa HR_DOCUMENTS_OF_RECORD
và HR_DOCUMENT_TYPES_VL
. Có nghĩa là, đối với mỗi người, bạn muốn các tài liệu hồ sơ thuộc loại "Báo cáo giải phóng mặt bằng bảo mật", nếu có.
Đây là cách bạn làm điều đó:
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;
Lưu ý INNER JOIN
giữa DOR
và DOR_TYPE
nằm trong ngoặc đơn và LEFT JOIN
điều kiện là sau dấu ngoặc đơn.
Nếu bạn chỉ LEFT JOIN
một cách ngây thơ mọi thứ và bất kỳ người nào có tài liệu hồ sơ ngoài báo cáo thông quan an ninh, bạn sẽ nhận được quá nhiều hàng.