o SQL do sysbase pesquisa uma árvore
parent child
AA AAB
AA AAC
AAB AABA
AAB AABB
AAB AABC
AAB AABD
AAB AABE
AAB AABF
AABB AABBC
AABB AABBA
AABB AABBB
AABB AABBC
BB BBA
BB BBB
BBB BBBA
então, basicamente, eu quero uma consulta que, dada a entrada AA e BB, me daria todas as entradas acima. Suponha que o acima é uma estrutura de diretório, o resultado é semelhante para me obter todas as subdiretórios recursivamente de uma de mais raiz.
Como disse, Vi a pergunta tantas vezes, mas mesmo assim não encontrei uma resposta que pudesse usar. Havia alguns links para artigos externos, eu li 3 ou 4, mas acho que não posso traduzir isso para SQL. (Minha experiência sql está enferrujada um pouco).Obrigado
2 answers
Desvantagens - difícil de manter e grande volume devido à desnormalização.
F. e. Os nós são duas tabelas e transições. \ A primeira tabela é óbvia e o segundo deve conter all child of EVERY node include node themself with level zero.
create table Node (
node_id integer not null,
name varchar(255) null,
constraint PK_NODE primary key (node_id)
)
go
create table Transition (
node_id integer null,
child_id integer null,
levl integer null
)
go
O nível Lvl é uma coluna útil em muitas consultas.
Por exemplo, você pode obter todas as crianças em qualquer nó com consulta simples:
select
c.node_id,
c.name
from
Transition t,
Node c
where
t.node_id = :id
and t.child_id = c.node_id
and lvl > 0
É claro que tem de criar um procedimento ou gatilho armazenado para preencher e manter a tabela de transição.
Existem outras soluções (menos dispendiosas em volume, mas mais difíceis de actualizar) mas pode começar com isto um.
Outros RDBMS, como o Oracle, construíram no suporte de consultas em árvore (ligar pela path F. E.), mas este tipo de consulta tem Muito mau desempenho em tabelas grandes.
É que eu entendi, você só quer a consulta para aquela tabela.
Então, vais ter de fazer uma coisa destas.select distinct parent, child from table
where parent like '%AA%'
OR parent like '%BB%'
Se não é disto que precisa, por favor faça um comentário:)