Teste seu SQL na WEB com SQL Fiddle
Muitas vezes você gostaria de rapidamente testar seu SQL mas não possui um ambiente disponível para isto, há também aqueles momentos em que você precisa de uma ajuda e quer mostrar um exemplo minimo de como é a consulta que você está executando, os resultados que ela retornam e qual a estrutura dos dados. Neste episódio demonstro um utilitário on-line de execução de consultas, o SQL Fiddle.
Mais informações:
Comandos:
create table pessoas (
cpf numeric,
nome varchar,
data_nascimento date,
constraint pk_pessoas primary key(cpf)
);
insert into pessoas
values
(111111111111,'JOAO DA SILVA','1980-01-10'),
(222222222222,'CHICO DOS SANTOS','1950-04-04'),
(333333333333,'EDITH J. S.','1970-10-20'),
(444444444444,'MARIA ANTONIA','1970-10-20')
;
select * from pessoas;
create table dependentes (
cpf_responsavel numeric references pessoas(cpf),
cpf_dependente numeric references pessoas(cpf),
constraint pk_depentendentes primary key (
cpf_responsavel, cpf_dependente
)
);
insert into dependentes
values
(111111111111,222222222222),
(111111111111,444444444444),
(222222222222,333333333333);
create temp table familia as
select
coalesce(cpf_dependente, dependente.cpf) as cpf_dependente,
dependente.nome as nome_dependente,
responsavel.nome as nome_resposavel,
cpf_responsavel
from dependentes
right join pessoas responsavel on (cpf_responsavel = responsavel.cpf)
right join pessoas dependente on (cpf_dependente = dependente.cpf)
;
with recursive parentesco as (
select f, 0 as level, array[cpf_dependente] as aux
from familia f
where cpf_responsavel is null
union all
select f1, level+1 as level, aux || cpf_dependente
from parentesco
join familia f1 on f1.cpf_responsavel = (parentesco.f).cpf_dependente
),
hierarquia as (
select level, (parentesco.f).* from parentesco
)
select
repeat('..', level) || cpf_dependente as cpf,
nome_dependente
from hierarquia;
