Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #95041
    gsmdf
    Participante

      Tenho 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á!

      #95043
      Marcos Lucas Melo
      Participante

        Boa 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 Dados

        #95047
        fsitja
        Participante

          Olá,

          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?

          #95048
          diego_aj
          Participante

            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);

            #95055
            gsmdf
            Participante

              Perfeita 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]

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.