【发布时间】:2014-11-07 12:46:57
【问题描述】:
我有四张桌子
TABLE_A
----------------
ID AName1 AName2
1 A11 A12
2 A21 A22
3 A31 A32
TABLE_B
------------
AID ID BName
1 B11 Ba11
1 B12 Ba12
1 B13 Ba13
1 B14 Ba14
2 B21 Ba21
2 B22 Ba22
3 B31 Ba31
TABLE_C
----------------
AID BID ID CName
1 B11 C11 Ca11
1 B11 C12 Ca12
1 B11 C13 Ca13
1 B12 C14 Ca14
1 B13 C15 Ca15
1 B13 C16 Ca16
1 B14 C17 Ca17
1 B14 C18 Ca18
1 B14 C19 Ca19
2 B21 C20 Ca20
2 B21 C21 Ca21
2 B22 C22 Ca22
2 B22 C23 Ca23
2 B22 C24 Ca24
2 B22 C25 Ca25
TABLE_D
----------------
AID BID ID DName
1 B11 D1 Da1
1 B11 D2 Da2
1 B11 D3 Da3
1 B12 D4 Da4
1 B12 D5 Da5
1 B13 D6 Da6
1 B13 D7 Da7
1 B13 D8 Da8
1 B13 D9 Da9
1 B14 D10 Da10
2 B21 D11 Da11
2 B21 D12 Da12
2 B21 D13 Da13
2 B22 D14 Da14
2 B22 D15 Da15
给定一对 AName1 和 AName2,我想获得 BName 的唯一值以及 CName 和 DName 的相应数组。
例如,给定 AName1 = A21 和 AName2 = A22,我想得到以下结果:
BName CName DName
B21 {Ca20, Ca21} {Da11, Da12, Da13}
B22 {Ca22, Ca23, Ca24, Ca25} {Da14, Da15}
我目前正在使用以下查询:
SELECT
b.BName,
array_agg(c.CName),
array_agg(d.DName)
FROM
TABLE_B
INNER JOIN
TABLE_A on b.AID=TABLE_A.ID
LEFT JOIN
TABLE_C c on c.BID = b.ID
LEFT JOIN
TABLE_D d on d.BID=b.ID
WHERE
TABLE_A.AName1 like 'A21' AND
TABLE_A.AName2 like 'A22'
GROUP BY
b.ID
这是重复值,就好像它也在 C 和 D 上分组:
BName CName DName
B21 {Ca20, Ca20, Ca20, Ca21, Ca21, Ca21} {Da11, Da12, Da13, Da11, Da12, Da13}
有谁知道我可以如何解决这个问题?我使用的是 PostgreSQL 版本 9.2。
【问题讨论】:
标签: postgresql aggregate-functions