Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pobieranie wszystkich dzieci rodzica za pomocą zapytania MSSQL

Zakładając, że chcesz mieć rodzeństwo wartości @p0 , możesz użyć prostego samodzielnego łączenia:

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

Klauzula not-equal zapewnia, że ​​otrzymasz rodzeństwo bez wartości, której szukałeś. Usuń go w razie potrzeby.

Przykład SQL Fiddle

Skoro jednak wspominasz o rekurencji, być może chcesz całe drzewo zaczynając od rodzica wartości @p0 . W takim przypadku możesz użyć rekurencyjnego CTE:

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

Przykłady SQL Fiddle korzystanie z danych iz dodatkowymi danymi demonstrującymi rekurencyjne CTE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przenoszenie tabeli SQL Server do innej grupy plików

  2. Czy są jakieś wady, aby zawsze używać nvarchar(MAX)?

  3. Skrypt C# przy użyciu StreamWriter tworzy dodatkowy znak?

  4. Rozwiązywanie problemów z przyznawaniem pamięci zmiennej w programie SQL Server

  5. SQL Server IF a IIF():jaka jest różnica?