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
    

    ここでのnot-equal句は、検索した値を含まない兄弟を確実に取得します。必要に応じて削除してください。

    SQLFiddleの例

    ただし、再帰について言及しているので、おそらくツリー全体が必要です。 値@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
    

    SQLFiddleの例データの使用 および再帰CTEを示すための追加データ



    1. PSQLException:エラー:tsqueryの構文エラー

    2. MySQLで行のない日でも1日あたりの行数をグループ化するにはどうすればよいですか?

    3. PostgreSQLパーティションシーケンスを作成するにはどうすればよいですか?

    4. Entity Framework クエリのパフォーマンスは、未加工の SQL 実行と極端に異なります