Como buscar dados de tabela pai-filho diretamente na base de dados

Estamos com uma necessidade de buscar os dados gravados em uma tabela pai-filho de um formulário direto na base de dados e para isso precisamos saber como encontrar esta tabela.

Sei que para buscar os dados do documento principal eu preciso saber o COD_LISTA fazendo um select na tabela documento procurando pelo numero do documento (nr_documento) e tipo (tp_documento) = 4. Com o código da lista descubro qual a tabela metalista com a combinação ml + XXX + DDD, onde XXX é destinado a empresa, e o DDD é o código da lista.

Agora, como fazer isso para tabelas pai-filho?

Boa tarde,

Então, existe a tabela META_LISTA_REL, que relaciona meta listas com seus "filhos". O COD_LISTA_PAI é o registro na tabela META_LISTA do pai (no caso o que está no DOCUMENTO) e o COD_LISTA_FILHO é o registro que está na META_LISTA do filho, ou seja, os registros filhos pertencem a tabela onde o DDD é o COD_LISTA_FILHO.

Bom dia Gustavo. A forma que você me orientou eu consegui encontrar a tabela pai-filho. Porém fiquei com uma dúvida, a forma de ligar o registro do documento principal com o registro da tabela pai-filho é pela coluna ID?

Você pode fazer isso pelo documentid presente tanto na metalista filha quanto na do pai.

Segue o SQL que você tem que rodar no banco do fluig pra verificar qual a ML relativa aos pais-filhos de um formulário:


SELECT
    'ML00?' + CONVERT(VARCHAR(10), l.COD_LISTA_PAI)  AS 'TABELA_PRINCIPAL',
    'ML00?' + CONVERT(VARCHAR(10), l.COD_LISTA_FILHO)  AS 'TABELA_PAIxFILHO',
    d.COD_LISTA,
    l.COD_LISTA_PAI,
    l.COD_LISTA_FILHO,
    l.COD_TABELA
    ,d.NUM_DOCTO_PROPRIED
    ,d.NUM_VERS_PROPRIED

FROM DEF_PROCES             p  -- Tabela principal de configuração dos processos
LEFT JOIN VERS_DEF_PROCES   vp  ON vp.COD_DEF_PROCES = p.COD_DEF_PROCES  -- Tabela auxiliar de versões do processo
                            AND vp.LOG_ATIV = 1
LEFT JOIN DOCUMENTO         d   ON d.NR_DOCUMENTO    = vp.NUM_PASTA_FORM -- Tabela de formulários/documentos ECM
                            AND d.VERSAO_ATIVA = 1
LEFT JOIN SERV_DATASET      ds  ON ds.COD_DATASET    = d.NM_DATASET  -- Tabela de datasets dos formulários/documentos
LEFT JOIN META_LISTA_REL    l   ON l.COD_LISTA_PAI    = d.COD_LISTA  -- Tabela de referência das tabelas de dados dos formulários
WHERE p.COD_DEF_PROCES = 'NOME_DO_PROCESSO'   OR   ds.COD_DATASET = ''
ORDER BY vp.NUM_VERS  DESC

Para achar as tabelas ML especificas de um processo basta informar na cláusula WHERE o nome do PROCESSO em "p.COD_DEF_PROCES", ou então o nome do DATASET do formulário em "ds.COD_DATASET".

Obs: É necessário subistituir o "?" pelo valor da COLIGADA da sua empresa (por padrão é 1).