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

Truy vấn đệ quy để tìm bản ghi mẹ

Hãy thử điều này:

declare @t table (
 childID int,
 ParentID int,
 level int
)

insert into @t
select 71, 154, 4
union
select 154, 192, 3
union
select 192, 209, 2
union
select 209, 0, 1

Declare @SearchChild int
set @SearchChild=71

  ;with MyCTE as (
      select t1.childID, t1.ParentID , @SearchChild AS searchChild, t1.level
        from @t t1 
        where t1.childID = @SearchChild
      UNION ALL
      select t1.childID, t1.ParentID , c.SearchChild, t1.level
        from @t t1
        inner join MyCTE c on t1.childID=c.ParentID
  )
select top 1 * from MyCTE order by level asc

ĐẦU RA:

childID     ParentID    searchChild level
----------- ----------- ----------- -----------
209         0           71          1

Tôi không rõ bạn là gì, không có hàng mà có 209 và 71 với nhau? đây là điều tốt nhất bạn có thể làm. Ngoài ra, CTE này hoạt động theo chuỗi chứ không phải giảm và sẽ hoạt động tốt hơn nhiều trên các bảng lớn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhà cung cấp Microsoft OLE DB cho SQL Server có hỗ trợ TLS 1.2 không

  2. Chèn giá trị tiếng Do Thái trong SQL Server 2008

  3. Tại sao chúng ta luôn thích sử dụng các tham số trong các câu lệnh SQL?

  4. Trả lại tất cả các ràng buộc bị vô hiệu hóa trong SQL Server (Ví dụ T-SQL)

  5. Tôi có thể lưu 'Đối tượng' trong cơ sở dữ liệu SQL Server không?