Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm ID cha cấp cao nhất

Tuy nhiên, một CTE khác ngắn hơn:

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

Đã kiểm tra tại đây: SQL Fiddle

CHỈNH SỬA :SQLfiddle chết tiệt này lại không phản hồi. Kiểm tra mã DDL bên dưới

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. Cập nhật tùy chọn ANSI_NULLS trong bảng hiện có

  2. Triển khai dự án cơ sở dữ liệu SQL Server (SSDT) ​​thông qua dòng lệnh

  3. Xem lại Cài đặt phiên của bạn với SESSIONPROPERTY () trong SQL Server

  4. .NET nén XML để lưu trữ trong cơ sở dữ liệu SQL Server

  5. Sử dụng SQL Server Express 2008 với cơ sở dữ liệu SQL Server 2005 - cách kiểm tra tính tương thích