I have a table with JSONB column. In this column we store identifiers of another table as json array of strings. How can I join the tables
Table Customer:
| CustomerID | Name | Campaigns (JSONB) |
|---|---|---|
| 1 | John | [ "rxuatoak", "vsnxcvdsl", "jkiasokd" ] |
| 2 | Mick | [ "jdywmsks", "nxbsvwios", "jkiasokd" ] |
Table Campaign:
| CampaignID | Identifier | CampaignName |
|---|---|---|
| 1 | rxuatoak | Alpha |
| 2 | vsnxcvdsl | Bravo |
| 3 | jkiasokd | Charlie |
| 4 | jdywmsks | Delta |
| 5 | nxbsvwios | Echo |
Result something like:
| CustomerID | Name | CampaignNames |
|---|---|---|
| 1 | John | Alpha, Bravo, Charlie |
| 2 | Mick | Delta, Echo, Charlie |
I tried many ways, and could only find online help with json objects inside the jsonb column. My jsonb column has simple array of strings.
Using POSTGRES 13
CodePudding user response:
You can apply a JOIN operation between the two tables on condition that an identifier is found within a campaign (using ? operator). Then apply aggregation with STRING_AGG, with respect to the "CustomerID" and "Name"
SELECT customer.CustomerID,
customer.Name_,
STRING_AGG(campaign.CampaignName, ',') AS CampaignNames
FROM customer
INNER JOIN campaign
ON customer.Campaigns ? campaign.Identifier
GROUP BY customer.CustomerID,
customer.Name_
Check the demo here.
