2

承認に使用する階層 (親子) ロール ベースの構造があります。親のIDとともにロールを格納する単純なスキーマがあります。ここで、role_id が与えられ、そこからそのロールのすべての親を取得したいと考えています。

たとえば、次のようなテーブルがあります。

  ROLE_ID    ROLENAME    IS_PARENT    PARENT_ROLE_ID
1       1    ABC CORP         Y         NULL
2       2    ABC EC           Y         1
3       3    ABC WC           Y         1
4       4    ABC NY           Y         2
5       5    ABC OH           Y         2
6       6    NY ORTH          N         4
7       7    NY CARD          N         4
8       8    OH ORTH          N         5
9       9    OH CARD          N         5

ROLE_IDここで、 ofが提供されると8、クエリは次のように返されます。

ROLE_ID
      1
      2
      5
      8

OH ORTHの子なのでABC OHABC OHの子ですABC ECABC ECは の子です。 、、およびABC CORPを取得する必要があります。1521

上記の例では、4 つのレベルしかありません。しかし、実際には、多くのレベルが存在する可能性があります。

この問題の解決策をグーグルで試してみたところ、ここでつまずきました。しかし、これは Oracle に特有のものであり、Microsoft SQL Server でクエリを実行すると構文エラーが発生します。

これは可能ですか?Microsoft Windows Azure で Microsoft SQL サーバーを使用しています。

SQL に関する知識は限られています。助けてください

4

1 に答える 1

1

はい、可能です。再帰 CTE を使用できます。

http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspx

;WITH RCTE AS 
(
  SELECT ROLE_ID, PARENT_ROLE_ID FROM Table1
  WHERE ROLE_ID = 8

  UNION ALL

  SELECT t.ROLE_ID, t.PARENT_ROLE_ID FROM RCTE r
  INNER JOIN Table1 t on r.PARENT_ROLE_ID = t.ROLE_ID
)
SELECT * FROM RCTE

SQLFiddle デモ

于 2013-06-25T08:21:09.133 に答える