PostgreSQL JOIN具有数组类型的数组元素

Man*_*H L 6 sql arrays postgresql join

我有两个表标签和用户

表名称:标签

| id | name  |  
| 1  | one   |   
| 2  | two   |   
| 3  | three |   
| 4  | four  |   
| 5  | five  |   
Run Code Online (Sandbox Code Playgroud)

表名称:用户

| id | fname | tags      |  
| 1  | Ram   | {1,5}     |
| 2  | Sham  | {1,2,3,4} |
| 3  | Bham  | {1,3}     |
| 4  | Kam   | {5,2}     |
| 5  | Lam   | {4,2}     |
Run Code Online (Sandbox Code Playgroud)

预期产量:

| id | fname | tags                  |
| 1  | Ram   | one, five             |
| 2  | Sham  | one, two, three, four |
| 3  | Bham  | one, three            |
| 4  | Kam   | five, two             |
| 5  | Lam   | four, two             |
Run Code Online (Sandbox Code Playgroud)

试验1:使用JOIN

SELECT I.id, I.fname, I.tags, J.name FROM users I 
JOIN tags J ON J.id = ANY(I.cached_tag_ids) 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

结果:

| id | fname | tags |
| 1  | Ram   | one  |
| 1  | Ram   | five |
Run Code Online (Sandbox Code Playgroud)

预期:

| id | fname | tags       |
| 1  | Ram   | one, five  |
Run Code Online (Sandbox Code Playgroud)

Bru*_*lza 11

tags应该有一个INTEGER[]类型。

CREATE TABLE users(
   id SERIAL,
   fname VARCHAR(50),
   tags INTEGER[]
);
Run Code Online (Sandbox Code Playgroud)

然后,

SELECT I.id, I.fname, array_agg(J.name) 
FROM users I 
LEFT JOIN tags J 
ON J.id = ANY(I.tags) 
GROUP BY fname,I.id ORDER BY id
Run Code Online (Sandbox Code Playgroud)

应该管用。见sqlfiddle

这个问题可能会有所帮助。