Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Получаване на всички деца на родител с помощта на MSSQL заявка

Ако приемем, че искате да получите братя и сестри от стойността @p0 , можете да използвате просто самосъединяване:

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

Клаузата за неравенство тук гарантира, че получавате братя и сестри, които не включват стойността, която търсите. Премахнете го, ако е необходимо.

Пример за SQL Fiddle

Тъй като обаче споменавате рекурсия, може би искате цялото дърво започвайки от родителя на стойността @p0 . В този случай можете да използвате рекурсивен 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

Примери за SQL Fiddle използване на вашите данни ис допълнителни данни за демонстриране на рекурсивния 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. Как мога да уведомя моята програма, когато базата данни е актуализирана?

  2. Плюсове и минуси на използването на SqlCommand Prepare в C#?

  3. Грешка:Не може да се извлече ред от OLE DB доставчик ADsDSOObject за свързан сървър ADSI

  4. Получаване на данни от съхранена процедура с Entity Framework

  5. Как да направите ЛЯВО ПОЛУ ПРИСЪЕДИНЕНИЕ в SQL Server