0

私はこのようなものを持っています。

\d テーブル 1

uid |int (primary key)
name|text
cids|int[]

例:

id   | name  | cids 
 1   | joe   |{10,20,30}
 2   | marry |{10,20,30,40}
 3   | john  |{30,40}

\d テーブル 2

cid   |int (primary key)
name  |text
type  |int

cid  | name  |  type
10   | aname | 0  
20   | bname | 0
30   | cname | 1
40   | dname | 0

今、私はテーブル1からのid、名前、テーブル2からの名前のcidのような結果が欲しかった。

Example. 
id | name | cid      |cnames
1  | Joe | {10,20}   |{aname,bname}

これを行う効率的な方法を教えてください。前もって感謝します。

4

1 に答える 1

1

バージョン < 9.0 の場合はこれを試してください

SELECT A.id, A.name, 
array_agg(b.cid) cids,array_agg(B.name) cnames
FROM Table1 A
JOIN 
(
  SELECT * FROM Table2 ORDER BY cid
)
B ON B.cid = ANY(A.cids)
WHERE type <> 1
GROUP BY A.id, A.name;

(バージョン 9+ の次の作品)

SELECT A.id, A.name, 
array_agg(b.cid order by b.cid) cids,
array_agg(B.name ORDER BY B.name) cnames
FROM Table1 A
JOIN Table2 B ON B.cid = ANY(A.cids)
WHERE type <> 1
GROUP BY A.id, A.name

SQLデモはこちら

于 2013-01-30T05:45:24.957 に答える