Postgres:选择json字段数组包含特定值的所有字段?

时间:2015-05-14 08:10:28

标签: json postgresql

假设我有一个userscompanies表,其中1个用户可以为多家公司工作。在这种情况下,我使用JSON字段对其进行建模。

users
- id: PK
- jobs: json

示例jobs字段:[{"company_id": 1, "title": "Engineer" }, {"company_id": 2, "title": "Accountant"}]

考虑到公司ID,有没有办法运行1个SQL查询(Postgres 9.4),可以提取在该公司工作的所有用户ID?类似的东西:

select id from users where map(jobs, "company_id") contains <?>

2 个答案:

答案 0 :(得分:3)

可能不是最好的方法,但这有效:

SELECT id FROM
  (SELECT id, json_array_elements(jobs) as a FROM table) b
WHERE a->>'company_id'='1';

答案 1 :(得分:2)

这应该可以解决问题:

SELECT id FROM users WHERE jobs @>'[{"company_id":1}]'