Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menemukan ID Induk Tingkat Teratas

CTE lain yang lebih pendek :

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

Diuji di sini :SQL Fiddle

EDIT :SQLfiddle sialan ini tidak responsif lagi. Uji Kode DDL di bawah ini

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Istirahat baris SQL tidak berfungsi

  2. Tinjau Pengaturan Sesi Anda dengan SESSIONPROPERTY() di SQL Server

  3. Dapatkan ukuran penyimpanan Tabel dan Indeks di server sql

  4. Pilih Extended Property dari tabel SQL Server

  5. Mengapa saya mendapatkan upaya tidak valid untuk memanggil HasRows ketika pembaca ditutup dengan koneksi terbuka?