2

ややこしいタイトルかもしれません。基本的に、電子メールの受信トレイを考えてください。私はテーブルを持っています:

代替テキスト

ご覧のとおり、これは非常に単純な再帰テーブルであり、メッセージのparentIDのみを持ち、緑色のハイライトリングでわかるように、「チェーン」の終わりはparentIDにNULLがある場合です。

必要なのは、(たとえば) 12 の INBOXID を提供し、すべての親を返すことです。この例では、11
の INBOXID である 1 つのレコードを取得する必要があります。2 番目の例では、INBOXID を渡すことができるはずです。 9 個のうち、今回は INBOXID 8、7、および 1 の行を取得する

次のクエリである程度成功しました。

with q as
(
select inboxid, parentid
from bizzbox
union all
select a.inboxid, a.parentid
from bizzbox a
inner join q on q.inboxID = a.parentID
)
select distinct * from q

..しかし、もちろん、行のいずれかのすべての親を返します..おそらく、selectの1つのwhere句のような本当にばかげた単純なものであることは知っています..しかし、それを試してみました(つまり、開始点の inboxid)、何をする必要があるのか​​ よくわかりません???

どんな助けでも大歓迎です!!!!! デビッド。

4

1 に答える 1

1

これを試してください:

WITH  cte
    AS ( SELECT   InboxID,
                  ParentID
         FROM     BIZZBOX
         WHERE    InboxID = @inboxID
         UNION ALL
         SELECT   prev.InboxID,
                  prev.ParentID
         FROM     BIZZBOX prev
         INNER JOIN cte curr ON prev.InboxID = curr.ParentID ),
     cte1
   AS ( SELECT   InboxID,
                 ParentID
        FROM     BIZZBOX
        WHERE    InboxID = @inboxID
        UNION ALL
        SELECT   prev.InboxID,
                 prev.ParentID
        FROM     BIZZBOX prev
        INNER JOIN cte1 curr ON prev.ParentID = curr.InboxID )
SELECT  * FROM    cte
UNION
SELECT  * FROM    cte1
于 2010-12-19T02:20:27.470 に答える