sql >> Database teknologi >  >> RDS >> Sqlserver

Find forældre-id på øverste niveau

Endnu en kortere CTE :

WITH cte AS(
      SELECT *, id AS topparent 
      FROM t 
      WHERE parentid IS NULL
  UNION ALL
      SELECT t.*, c.topparent 
      FROM t JOIN cte c ON c.id = t.parentid
      WHERE t.id <> t.parentid
)
SELECT * FROM cte

Testet her :SQL Fiddle

REDIGER :Denne forbandede SQLfiddle reagerer ikke igen. Test DDL-koden nedenfor

CREATE  table t (id INT, parentid INT);
INSERT INTO T VALUES (1  , NULL );
INSERT INTO T VALUES (2  , 1    );           
INSERT INTO T VALUES (3  , 2    );          
INSERT INTO T VALUES (9  , NULL );          
INSERT INTO T VALUES (5  , 9    );          
INSERT INTO T VALUES (6  , 5    );          
INSERT INTO T VALUES (25 , NULL );          
INSERT INTO T VALUES (30 , 25   );


  1. Fejl i indlejret underforespørgsel i DQL:Klasse '(' er ikke defineret

  2. Optimale MySQL-indstillinger til forespørgsler, der leverer store mængder data?

  3. Oracle- Venstre ydre joinforbindelse på flere tabeller returnerer ikke ønskede null-værdier

  4. MySQL:vælg elementer, der ikke er på en liste