直到大约5分钟前,我甚至不知道你得到的类型VARCHAR也是一个数组.我如何加入这些表格:
PEOPLE
ID | PERSON | GROUPS
1 | John | {ONE,TWO}
2 | Jack | {TWO}
3 | Jill | {ONE,TWO,THREE}
4 | Jim | {TWO,THREE}
GROUPS
ID | TITLE
ONE | First
TWO | Second
THREE | Third
Run Code Online (Sandbox Code Playgroud)
我想最终得到这样的东西:
ID | PERSON | GROUP
1 | John | ONE
1 | John | TWO
2 | Jack | TWO
3 | Jill | ONE
3 | Jill | TWO
3 | Jill | THREE
4 | Jim | TWO
4 | Jim | THREE
Run Code Online (Sandbox Code Playgroud)
如何在一个查询中获得此权限?
unnest 这里不需要,你可以使用一个简单的连接与数组成员资格的测试:
SELECT people."ID", people."PERSON", groups."ID"
FROM people
INNER JOIN groups ON groups."ID" = ANY (people."GROUPS")
ORDER BY people."ID", groups."ID";
Run Code Online (Sandbox Code Playgroud)
请参阅:http://sqlfiddle.com/#!12/5fa34/7
(奇怪的上层外壳是因为我无法解决修复SQLFiddle不一致的标识符引用问题.它引用了列名而不是表名.)
您甚至可以使用GIN索引people.GROUPS并获得索引连接.GIN索引的构建并不便宜,而且更新成本很高,所以你只需要在真正需要的时候这样做,但它很有用.请参阅阵列索引手册.例如:
CREATE INDEX people_groups_gin_idx ON people USING GIN("GROUPS");
SELECT people."ID", people."PERSON", groups."ID"
FROM people
INNER JOIN groups ON ARRAY[groups."ID"] @> people."GROUPS"
ORDER BY people."ID", groups."ID";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |