1

チェーン形式でレコードをフェッチする SQL クエリを作成しようとしています。

次に例を示します。

A が B から招待され、A からの招待を受け入れると、チェーンが開始されます。

このチェーンでは、次のようなレコードを表示したい

  • AさんはBさんに招待されました
  • BはCに招待された
  • CはDに招待された

クエリを書くのを手伝ってもらえますか?

ここに構造があります

志願者表

id     Name   email
100   ABC  abc@test.com
101   PQR  pqr@test.com
102   XYZ  xyz@test.com
....... .......

Roommates table

id      email             created_by
1001    xyz@test.com      101
1002    pqr@test.com      100
............. .............

created_by フィールドによると、次の結果を表示する必要があります

結果は -

XYZ invited by PQR
PQR invited by ABC
..... ......
4

1 に答える 1

1

これを行うには参加するだけでよいようです:

select
    A.Name || ' invited by ' || C.Name
from Roommates as R
    inner join Applicants as A on A.id = R.applicant_id
    inner join Applicants as C on C.id = R.created_by

更新:

create or replace function get_chain(_id int)
returns table(data text)
as
$$
   with recursive cte as (
       select r.created_by, a.id as applicant_id
       from roommates as r
           inner join applicants as a on a.email = r.email
       where r.created_by = _id

       union all

       select r.created_by, a.id as applicant_id
       from roommates as r
           inner join applicants as a on a.email = r.email
           inner join cte as c on c.applicant_id = r.created_by
   )
   select
       A."Name" || ' invited by ' || R."Name"
   from cte as c
       inner join Applicants as A on A.id = c.applicant_id
       inner join Applicants as R on R.id = c.created_by
$$
language sql;

sql fiddle demo

于 2013-08-30T04:58:47.637 に答える