2015-06-13 16 views
7

Tôi có một cột test bảng có mảng int và các giá trị như {1000,4000,6000} hoặc {1000} hoặc {1000,4000} được gọi là ekw. Các giá trị này khớp với một chuỗi mô tả trong một bảng khácGiá trị mảng số nguyên PostgreSQL tham gia vào số nguyên trong bảng khác với chuỗi mô tả

tab: test 
id | name | ekw 
----------------- 
1 | One | {1000} 
2 | Two | {1000,4000} 
3 | Three | {1000,4000,6000} 

tab: ekwdesc 
id | value | desc 
----------------- 
1 | 1000 | Max 
2 | 2000 | Tim 
3 | 3000 | Rita 
5 | 4000 | Sven 
6 | 5000 | Tom 
7 | 6000 | Bob 

có thể chọn các cột này và in chuỗi không?

cái gì đó như:

select name, ekw from test, ekwdesc 

Tôi muốn xem kết quả này:

id | name | ekwdesc 
----------------- 
1 | One | Max 
2 | Two | Max, Sven 
3 | Three | Max, Sven, Bob 

Tôi đã thử với IN và BẤT CỨ nhưng không thể làm cho nó làm việc.

Trả lời

11

Bạn đã có ý tưởng đúng để sử dụng toán tử any để tham gia. Khi tham gia hoàn tất, tất cả những gì còn lại là sử dụng string_agg để chuyển kết quả sang định dạng bạn muốn:

SELECT name, STRING_AGG(description, ', ') 
FROM  test 
JOIN  ekwdesc ON ekwdesc.value = ANY(test.ekw) 
GROUP BY name 

Xem các đính kèm SQLFiddle cho một ví dụ thực thi.

+0

Điều này có đảm bảo rằng các thẻ mô tả sẽ được trả về theo thứ tự đúng - thứ tự của các giá trị trong mảng ekw? – Sigfried

+0

@Sigfried Nope. –

+0

Giải pháp này có thể thay đổi để hoạt động trong trường hợp bảng chính có các trường json không? như bạn đã biết, bạn không thể sử dụng nhóm theo các cột json. – eyeinthebrick

Các vấn đề liên quan