0

次のようなSQLテーブルがあります。

id, parentid, name 
1     0        Root
2     1        label 1
3     2        label 1.1
4     3        label 1.1.1
5     1        label 2
6     5        label 2.1
7     6        label 2.1.1

ID2/3/5などですべての子を検索したいのですが。どうすればよいですか。

4

1 に答える 1

1

がテーブルtable1名であり@input、入力値が含まれているとします。

DECLARE @input INT = 2;
DECLARE @parent INT = 0;
DECLARE @name NVARCHAR(200); --same type with name column
SELECT @parent = parentid, @name = name FROM table1 WHERE id = @input;
IF @parent = 0
   SELECT * FROM table1 WHERE id <> @input
ELSE
   SELECT * FROM table1 WHERE name LIKE (@name + '%')

これは、名前フィールドが例のような形式の場合に実行できます。

再帰SQLについては、次のように参照してください。

WITH temptable (id, parentid, name) AS
(
  SELECT id, parentid, name
  FROM table1 t1
  WHERE t1.id = 1
  UNION ALL
  SELECT t2.id, t2.parentid, t2.name
  FROM table1 t2, temptable t3
  WHERE t2.parentid = t3.id
)
SELECT id, parentid, name 
FROM temptable
WHERE parentid <> 0
于 2012-12-08T05:58:48.837 に答える