
SQL dotaz
Dobrý den,
nevím si rady s komplikovaným dotazem.
tabulka: tab1
ID ID_RODICE VIDITELNOST
1 NULL 1
2 1 0
3 1 1
4 1 1
5 2 1
6 2 1
7 6 1
8 7 1
9 5 1
10 5 1
Je to takový strom, kde řádek s ID 1 je kořen. ID_RODICE je ID předchozího rodičovského uzlu.
Potřeboval bych dotaz, který vybere jen tu viditelnou část. Takže když uzel s ID 2 je neviditelný, tak se nebudou vybírat ani jeho potomci a potomci jeho potomků atd.
V tomto případě by tedy měly být výsledkem pouze řádky s ID 1, 3, 4.
Mám něco takového:
SELECT T1.* from tab1 T1 WHERE T1.VIDITELNOST = 1 AND EXISTS (select T2.id from tab1 T2 WHERE T2.VIDITELNOST = 1 AND T1.id_rodice = T2.id)
Ale nefunguje to úplně správně.
Moc díky za každý nápad.
Pokud by ta tabulka neměla mnoho záznamů (třeba desetitisíce a více), pak bych osobně v nějakém programovacím jazyce jedním dotazem nacpal celou tabulku do array, z něhož by záznamy tahala jednoduchá rekurzívní funkce.
V případě velké tabulky viz odkazy v předchozích příspěvcích.