0

以下を含むデータテーブルがあります。

|Parent Key| Component Key|

選択したコンポーネント キーのすべてのリーフ (親キー) を取得する必要があります。

例えば:

| 1 | 2 |
| 1 | 3 |
| 2 | 4 |
| 2 | 5 |
| 6 | 4 |
| 7 | 6 |
| 8 | 11 |
| 9 | 4 |
| 10 | 12 |

for component key = 4 受け取りたい

| 1 |
| 7 |
| 9 |

選択したコンポーネント キーがすでにリーフの場合 (コンポーネント キー == 選択したコンポーネント キーの行がない)、選択したコンポーネント キーのみを返したい。

selectだけでできますか?

最も効率的な方法でそれを行うには?

4

1 に答える 1

0

そのようなことを試してください:

DECLARE @selected INT = 4;

WITH cte
AS
(
    SELECT ParentKey, ComponentKey
    FROM Table1
    WHERE ComponentKey = @selected

    UNION ALL

    SELECT Table1.ParentKey, Table1.ComponentKey
    FROM Table1
    INNER JOIN cte ON Table1.ComponentKey = cte.ParentKey
)

SELECT ParentKey FROM cte
WHERE 
    ParentKey NOT IN (SELECT ComponentKey FROM Table1)
UNION
SELECT ParentKey FROM Table1 
WHERE 
    ParentKey = @selected
    AND ParentKey NOT IN (SELECT ComponentKey FROM Table1)

Table1 をテーブル名に置き換えます。

于 2013-10-01T13:02:34.530 に答える