- Este tópico contém 4 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 8 meses atrás por
gsmdf.
-
AutorPosts
-
13 de julho de 2010 às 5:47 pm #95041
gsmdf
ParticipanteTenho 3 tabelas: perfil_usuario(PU),perfil_usuario_unidade(PUU) e perfil_recurso_computacional(PRC).
Em PU tenho uma FK apontando para PUU (cod_recurso_computacional e seq).
Em PUU tenho uma FK apontando para PU (cod_usuario,cod_recurso_computacional,seq_perfil).Em PRC tenho um atributo se_exige_unidade (S ou N).
Pela lógica do sistema se um PU tiver um PRC com se_exige_unidade=’S’ então este PU deve ter um registro em PUU.Como seria um select que retornaria os registros de PRC com ind_exige_unidade=’S’ mas com 0 registros na tabela PUU?
Em outras palavras, quero retornar registros com exigência de unidade porém sem a linha necessária na tabela PUU.Parti do select que retorna todos registros com exigência de unidade com registros na tabela PUU porém não consegui modificar ele pra atender minha necessidade:
SELECT *
FROM PERFIL_USUARIO pu,
PERFIL_RECURSO_COMPUTACIONAL prc,
PERFIL_USUARIO_UNIDADE puu
WHERE PU.COD_RECURSO_COMPUTACIONAL = PRC.COD_RECURSO_COMPUTACIONAL
AND PU.SEQ_PERFIL = PRC.SEQ
AND PU.COD_RECURSO_COMPUTACIONAL = PUU.COD_RECURSO_COMPUTACIONAL
AND PU.SEQ_PERFIL = PUU.SEQ_PERFIL
AND PU.COD_USUARIO = PUU.COD_USUARIO
AND PRC.IND_EXIGENCIA_UNIDADE<>'N'
Agradeço desde já!
13 de julho de 2010 às 9:02 pm #95043Marcos Lucas Melo
ParticipanteBoa tarde gsmdf,
Teria como você explicar melhor o relacionamento das tabelas pois esta meio confuso do modo que você colocou. 😀
Atenciosamente,
Marcos Lucas
Projetista de Dados14 de julho de 2010 às 1:18 am #95047fsitja
ParticipanteOlá,
Ficou bem complicado de entender. Por mais que queira explicar detalhadamente, sempre vai ficar ambíguo e difícil de interpretar.
Por que você não posta uma estrutura simplificada das tabelas (create tables são preferíveis) e uns dados de exemplo de cada uma, depois mostra qual o resultado você gostaria de enxergar, para aqueles dados existentes em cada tabela?
14 de julho de 2010 às 3:00 pm #95048diego_aj
ParticipanteBom dia brother,
Também fiquei um pouco confuso com a descrição do seu problema,
mas sei lah, pelo que entendi fiz um esboço abaixo, não testei nem nada,
então da uma olhada aii e vê se era algo parecido.
blz, flw!!!!SELECT *
FROM PERFIL_USUARIO PU,
PERFIL_RECURSO_COMPUTACIONAL PRC
WHERE PU.COD_RECURSO_COMPUTACIONAL = PRC.COD_RECURSO_COMPUTACIONAL
AND PU.SEQ_PERFIL = PRC.SEQ
AND PRC.IND_EXIGENCIA_UNIDADE’N’
AND PU.COD_RECURSO_COMPUTACIONAL NOT IN
(SELECT PUU.COD_RECURSO_COMPUTACIONAL
FROM PERFIL_USUARIO P,
PERFIL_USUARIO_UNIDADE PUU
WHERE P.COD_RECURSO_COMPUTACIONAL = PUU.COD_RECURSO_COMPUTACIONAL
AND P.SEQ_PERFIL = PUU.SEQ_PERFIL
AND P.COD_USUARIO = PUU.COD_USUARIO);14 de julho de 2010 às 9:59 pm #95055gsmdf
ParticipantePerfeita solução, Diego!
Matou a pau.
Para os outros entenderem o porque da solução:Basicamente tem-se dados de perfil de usuario em PU.
Esse perfil pode estar associado a um PERFIL_RECURSO_COMPUTACIONAL. Nesta tabela há um campo IND_EXIGENCIA_UNIDADE. Se este campo estiver setado com um char diferente de ‘N’ (NÃO) então deve-se existir pelo menos um registro em PERFIL_USUARIO_UNIDADE associado a esse PERFIL_USUARIO e PERFIL_RECURSO_COMPUTACIONAL deste perfil_usuario.Por exemplo o teste que fiz:
Inseri em PERFIL_RECURSO_COMPUTACIONAL um registro com COD_RECURSO_COMPUTACIONAL=1, SEQ=3 e IND_EXIGENCIA_UNIDADE=’S’ (Exige unidade).Depois inseri em PERFIL_USUARIO um registro com COD_USUARIO=1,COD_RECURSO_COMPUTACIONAL=1,SEQ_PERFIL=3.
Porém não inseri e não havia na tabela PERFIL_USUARIO_UNIDADE nenhum registro com COD_RECURSO_COMPUTACIONAL=1,SEQ_PERFIL=3,COD_USUARIO=1.
Logo retorna este registro, pois conceitualmente DEVERIA haver uma unidade associada.Obrigadão!!
[quote=”diego_aj”:2ket3o2v]Bom dia brother,
Também fiquei um pouco confuso com a descrição do seu problema,
mas sei lah, pelo que entendi fiz um esboço abaixo, não testei nem nada,
então da uma olhada aii e vê se era algo parecido.
blz, flw!!!!SELECT *
FROM PERFIL_USUARIO PU,
PERFIL_RECURSO_COMPUTACIONAL PRC
WHERE PU.COD_RECURSO_COMPUTACIONAL = PRC.COD_RECURSO_COMPUTACIONAL
AND PU.SEQ_PERFIL = PRC.SEQ
AND PRC.IND_EXIGENCIA_UNIDADE’N’
AND PU.COD_RECURSO_COMPUTACIONAL NOT IN
(SELECT PUU.COD_RECURSO_COMPUTACIONAL
FROM PERFIL_USUARIO P,
PERFIL_USUARIO_UNIDADE PUU
WHERE P.COD_RECURSO_COMPUTACIONAL = PUU.COD_RECURSO_COMPUTACIONAL
AND P.SEQ_PERFIL = PUU.SEQ_PERFIL
AND P.COD_USUARIO = PUU.COD_USUARIO);[/quote] -
AutorPosts
- Você deve fazer login para responder a este tópico.