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

Bắt tất cả con cái của một phụ huynh bằng cách sử dụng truy vấn MSSQL

Giả sử bạn muốn lấy anh chị em của giá trị @p0 , bạn có thể sử dụng một tự tham gia đơn giản:

SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0

Mệnh đề không bằng ở đây đảm bảo rằng bạn nhận được anh chị em không bao gồm giá trị bạn đã tìm kiếm. Xóa nó nếu cần.

Ví dụ về SQL Fiddle

Vì bạn đề cập đến đệ quy, có lẽ bạn muốn toàn bộ cây bắt đầu từ cấp độ gốc của giá trị @p0 . Trong trường hợp đó, bạn có thể sử dụng CTE đệ quy:

WITH parent AS (
    SELECT Parent
    FROM Table1
    WHERE Child = @p0
), tree AS (
    SELECT x.Parent, x.Child
    FROM Table1 x
    INNER JOIN parent ON x.Parent = parent.Parent
    UNION ALL
    SELECT y.Parent, y.Child
    FROM Table1 y
    INNER JOIN tree t ON y.Parent = t.Child
)
SELECT Parent, Child
FROM tree

Ví dụ về SQL Fiddle sử dụng dữ liệu của bạn với dữ liệu bổ sung để chứng minh CTE đệ quy



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Linux - PHP 7.0 và MSSQL (Microsoft SQL)

  2. Thứ tự của các cột trong chỉ mục quan trọng như thế nào?

  3. Tham gia đến MAX bản ghi ngày trong nhóm

  4. Lỗi máy chủ SQL - HRESULT E_FAIL đã được trả về từ một cuộc gọi đến thành phần COM

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