Oracle
 sql >> база данни >  >> RDS >> Oracle

Върнете всички потребители, дори и тези, които не отговарят на критериите ми

Както беше отбелязано другаде тук, този вид нещо е много по-лесно да се направи, ако използвате обединения в стил 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 всичко и всички хора имат документи за досие освен доклади за проверка на сигурността, ще получите твърде много редове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на грешка при изпълнение на пакета

  2. Извлечете броя на актуализираните редове

  3. Oracle има ли концепция за филтриран индекс?

  4. връзка "един към много" с ограничение на базата данни и inverse=true

  5. Използване на rownum в SQL израза на oracle в комбинация с клауза за поръчка