sql >> Databáze >  >> RDS >> Sqlserver

SQL:Najděte chybějící cesty ke složkám v hierarchii rozdělení

Pomocí této přidané cesty (11,2,'U\V\Z\L\O\Q\R\S\T') pro zobrazení více chybějících složek v cestě:

with cte as (
select BaseDirID, DisplayPath = left(DisplayPath,len(DisplayPath)-charindex('\',reverse(DisplayPath)))
from t
where DirLevel > 1
  and not exists (
  select 1 
  from t i
  where t.BaseDirId = i.BaseDirId
    and i.DisplayPath = left(t.DisplayPath,len(t.DisplayPath)-charindex('\',reverse(t.DisplayPath)))
    )
union all 
select BaseDirID, DisplayPath = left(DisplayPath,len(DisplayPath)-charindex('\',reverse(DisplayPath)))
from cte t
where not exists (
  select 1 
  from t i
  where t.BaseDirId = i.BaseDirId
    and i.DisplayPath = left(t.DisplayPath,len(t.DisplayPath)-charindex('\',reverse(t.DisplayPath)))                                                   
    )
)
select distinct * 
from cte

demo rextester:http://rextester.com/CEVGZ96613

vrátí:

+-----------+-----------------+
| BaseDirID |   DisplayPath   |
+-----------+-----------------+
|         1 | A\B             |
|         1 | A\B\C\D         |
|         1 | A\B\F\G         |
|         2 | U\V             |
|         2 | U\V\M\L         |
|         2 | U\V\W\X         |
|         2 | U\V\Z           |
|         2 | U\V\Z\L         |
|         2 | U\V\Z\L\O       |
|         2 | U\V\Z\L\O\Q     |
|         2 | U\V\Z\L\O\Q\R   |
|         2 | U\V\Z\L\O\Q\R\S |
+-----------+-----------------+



  1. Nezdá se, že by kaskáda Doctrine2.3 a OneToOne fungovala

  2. Je vyžadována nápověda pro výběr dotazu SQL

  3. Vnořená funkce PIPELINED

  4. Jak vložit hodnotu NULL z proměnné PHP do MySQL, abyste se vyhnuli vkládání SQL?