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

T-SQL lấy nút gốc trong hệ thống phân cấp

Làm thế nào về việc chuyển LEFT JOIN ra khỏi CTE?

WITH root_nodes
AS (
    -- Grab all the leaf nodes I care about
    SELECT NULL as child_node, n.node as parent_node
    FROM #nodes n
    WHERE n.node IN (1, 2)

    UNION ALL

    -- Grab all the parent nodes
    SELECT rn.parent_node as child_node, a.parent_node
    FROM root_nodes rn
        JOIN #arcs a
      ON rn.parent_node = a.child_node
)
SELECT DISTINCT rn.parent_node AS root_node
FROM root_nodes rn
    LEFT JOIN #arcs a
  ON rn.parent_node = a.child_node
WHERE a.parent_node IS NULL

Tập hợp kết quả là 1, 4, 7.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liên minh máy chủ Sql nhưng giữ trật tự

  2. Làm cách nào để tạo người dùng trong SQL-Server chỉ có quyền truy cập vào một bảng và chỉ có thể chèn các hàng

  3. Cột đầu ra tên XML UNION FOR XML

  4. Bắt chước group_concat () kết hợp với GROUP BY

  5. Truy vấn SQL để xóa các giá trị trùng lặp trong liên kết bên trong 3 bảng với hai cơ sở dữ liệu khác nhau