Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Relační databáze a stromová struktura - to opravdu není vhodná kombinace. Nicméně i to se dá - zkus… nový
MachR55 21.07.2015 10:33
MachR55
K tomu jsem před časem četl docela pěkný článek: https://www.interval.cz/clanky/metody-ukladani-str… nový
Wikan 21.07.2015 10:34
Wikan
select t1.* from tab1 t1 where t1.VIDITELNOST = 1 AND ((SELECT VIDITELNOST FROM tab1 t2 WHERE t2.ID… nový
wam_Spider007 21.07.2015 13:24
wam_Spider007
Pokud by ta tabulka neměla mnoho záznamů (třeba desetitisíce a více), pak bych osobně v nějakém prog… poslední
hynajs 21.07.2015 13:29
hynajs

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.

Zpět do poradny Odpovědět na původní otázku Nahoru