consegui bolar a lógica usando IN, mas ainda não absorvi 100% ainda o funcionamento do bendito EXISTS
ex: eu sou RAFAEL, chefe do DEPTO DE INFORMÁTICA, que tem os subsetores subordinados a mim (Projetos, Internet, Suporte, etc) eu preciso trazer todos os funcionários somente dos subsetores que são subordinados ao meu, quando entrar na tela do sistema:
esse primeira select será a select interna, que trará os subsetores subordinados a mim
SELECT gehierarq.orgs_cd_subordinado
FROM gehierarq, georgset, rhlotacao
WHERE rhlotacao = georgset.orgs_cd
AND georgset.orgs_cd = gehierarq.orgs_cd
AND rhlotacao.func_cd = '000654' --Meu código de funcionário/chefe
AND rhlotacao.lota_bo_principal = 'S';
resultado que o select interno irá trazer:
ORGS_CD_SUBORDINADO
-------------------
000028 (ASSESSORIA DE PROJETOS)
000029 (PROJETOS)
000030 (SUPORTE)
000600 (INTERNET)
eu fiz o select com IN dessa forma?
SELECT rhlotacao.orgs_cd, rhpessoa.pess_cd, rhpessoa.pess_nm_nome
FROM rhpessoa, rhfunc, rhlotacao, georgset
WHERE rhpessoa.pess_cd = rhfunc.pess_cd
AND rhfunc.func_cd = rhlotacao.func_cd
AND rhlotacao.orgs_cd = georgset.orgs_cd
AND rhfunc.func_dt_demissao IS NULL
AND rhlotacao.data_dt_final IS NULL
AND rhlotacao.orgs_cd IN (SELECT gehie.orgs_cd_subordinado
FROM gehierarq gehie, georgset georg, rhlotacao rhlota
WHERE rhlota.orgs_cd = georg.orgs_cd
AND georg.orgs_cd = gehie.orgs_cd
AND rhlota.func_cd = '000654'
AND rhlota.lota_bo_principal = 'S')
ORDER BY rhpessoa.pess_nm_nome;
até tentei algumas coisas aqui mas meio no TA (tentativa acerto), meio sem entender mesmo, e trouxe umas coisas absurdas, zilhões de registros e gente que não tem nada a ver com meu depto.