sql >> Databáze >  >> RDS >> Sqlserver

Získání všech potomků rodiče pomocí dotazu MSSQL

Za předpokladu, že chcete získat sourozence z hodnoty @p0 , můžete použít jednoduché vlastní připojení:

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

Klauzule nerovná se zde zajišťuje, že získáte sourozence, kteří nezahrnují hodnotu, kterou jste hledali. V případě potřeby jej odstraňte.

Příklad SQL Fiddle

Protože zmiňujete rekurzi, možná budete chtít celý strom počínaje rodičem hodnoty @p0 . V takovém případě můžete použít rekurzivní 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

Příklady SQL Fiddle používání vašich dat as dalšími údaji k demonstraci rekurzivního CTE



  1. Jak v tabulce PostgresQL vytvořit sloupec se všemi hodnotami ve sloupci1, pro který se hodnota aktuálního řádku ve sloupci1 objeví ve sloupci2?

  2. Po aktualizaci na macOS Big Sur se nemohu připojit ke své databázi PostgreSQL pomocí MAMP

  3. Mohu použít samostatnou databázovou vrstvu Laravel?

  4. Výsledky tisku v Pythonu a MySQL