Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #100338
    Danielson
    Participante

      Estou tentando encontrar uma maneira de listar uma consulta entre registros pais e filhos.

      A situação é a seguinte:
      Um registro tem um código unico e dependendo da necessidade pode gerar registros filhos.
      Nesse caso o filho terá um código PK próprio, mas esse novo item terá um campo COD_FILHO vinculado ao COD_PAI.

      Exemplo:

      COD (PK) | COD_FILHO
      2000 | null
      2001 | 2000
      2002 | 2001
      2003 | 2002

      Obs:
      Quando o item pai chega ao ultimo nivel (não tem mais filhos) o campo COD_FILHO é igual a nulo;
      Todos os itens filhos tem um pai vinculado;
      Não há níveis fixos (geralmente são entre 3 e 4).

      De inicio pensei em usar subselect, mas isso só seria possível nos dois primeiros níveis. Ex:

      SELECT t.cod,
      t.cod_filho,
      (SELECT x.cod_filho FROM tabela x WHERE x.cod = t.cod_filho)
      FROM tabela t

      De que outra maneira poderia obter essas informações?
      Grato pela atenção.
      Forte Abraço!

      #100339
      rman
      Participante

        A solução é utilizar a clausula CONNECT BY do SELECT para caminhar em auto-relacionamento.

        Segue uma referencia:

        http://psoug.org/reference/connectby.html

        #100371
        Danielson
        Participante

          Ok, obrigado.

          Caso alguém se interesse, um exemplo simples de aplicação prática referente ao exemplo citado poderia ser escrito da seguinte maneira:


          SELECT level, lpad(' ', level*3) || t.cod_filho
          FROM tabela t
          START WITH ord_in_codigo = &valor
          CONNECT BY PRIOR t.cod_filho = t.cod_pai
          ORDER SIBLINGS BY t.cod_filho

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