Eu tenho uma estrutura de árvore de lâmpadas. Quero acender todas as lâmpadas começando pelas folhas da árvore. Uma lâmpada não pode ser acesa a menos que todos os seus filhos imediatos estejam acesos.
A relação entre os nós na estrutura da árvore é representada pela tabela A:
Tabela A :
node_id inteiro
child_node_id inteiro
A Tabela B representa os nós na árvore:
Tabela B :
id inteiro
estado booleano
O estado da tabela B representa os estados true = on e false = off.
Questão :
Gostaria de selecionar todas as lâmpadas que estão apagadas E tem todos os filhos imediatos ligados.
Isso provavelmente é muito simples, mas não consigo entender isso.
Eu primeiro repensaria o design. Você só precisa de uma tabela:
Com o layout conforme apresentado na pergunta, a consulta poderia ser:
Isso inclui nós que estão desativados e não têm filhos.
Para excluir nós sem filhos, substitua o primeiro
LEFT JOIN
por um simplesJOIN
.Ou, pode ser mais rápido: