sql >> Database teknologi >  >> RDS >> Oracle

Returner alle brugere, også dem der ikke opfylder mine kriterier

Som det er blevet bemærket andetsteds her, er denne slags ting meget nemmere at gøre, hvis du bruger ANSI-tilslutninger.

Alligevel er det lidt vanskeligt, fordi du vil LEFT JOIN din liste over personer til en INNER JOIN mellem HR_DOCUMENTS_OF_RECORD og HR_DOCUMENT_TYPES_VL . Det vil sige, at for hver person vil du have de registrerede dokumenter af typen "Sikkerhedsgodkendelsesrapport", hvis der findes nogen.

Sådan gør du det:

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;

Bemærk INNER JOIN mellem DOR og DOR_TYPE er i parentes og LEFT JOIN tilstand er efter parenteserne.

Hvis du bare naivt LEFT JOIN alt og enhver person har dokumenter, udover sikkerhedsgodkendelsesrapporter, vil du få for mange rækker.



  1. Mysql vælg hvor ikke i tabellen

  2. Innodb:Kan ikke finde FULLTEXT-indeks, der matcher kolonnelisten, når der forespørges på mere end 1 kolonne

  3. Skift en kolonnetype fra Dato til DateTime under ROR-migrering

  4. Kan Sqlalchemy fungere godt med flere vedhæftede SQLite-databasefiler?