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

Tham gia một bàn với chính nó

Bạn hoàn toàn có thể tự mình tham gia vào bàn chơi.

Tuy nhiên, bạn nên biết rằng thiết kế của bạn cho phép bạn có nhiều cấp độ phân cấp. Vì bạn đang sử dụng SQL Server (giả sử năm 2005 trở lên), bạn có thể có một CTE đệ quy lấy cấu trúc cây của bạn.

Bằng chứng về việc chuẩn bị khái niệm:

declare @YourTable table (id int, parentid int, title varchar(20))

insert into @YourTable values
(1,null, 'root'),
(2,1,    'something'),
(3,1,    'in the way'),
(4,1,    'she moves'),
(5,3,    ''),
(6,null, 'I don''t know'),
(7,6,    'Stick around');

Truy vấn 1 - Cấp độ nút:

with cte as (
    select Id, ParentId, Title, 1 level 
    from @YourTable where ParentId is null

    union all

    select yt.Id, yt.ParentId, yt.Title, cte.level + 1
    from @YourTable yt inner join cte on cte.Id = yt.ParentId
)
select cte.*
from cte 
order by level, id, Title


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao câu lệnh select của SqlServer lại chọn các hàng phù hợp và các hàng phù hợp và có dấu cách ở cuối

  2. Xử lý các giá trị âm với sql

  3. Siêu liên kết một giá trị trong kết quả truy vấn SQL Server trong SSMS

  4. Chuyển đổi ngầm định và làm tròn

  5. Gặp sự cố với UTF-8 lưu trữ trong NVarChar trong SQL Server 2008