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
这个问题可能会有所帮助。
归档时间: |
|
查看次数: |
1066 次 |
最近记录: |