2015-05-14 104 views
0

假設我有一個userscompanies表,其中1個用戶可以爲多個公司工作。在這種情況下,我使用JSON字段對其進行建模。Postgres:選擇json字段數組中包含特定值的所有字段?

users 
- id: PK 
- jobs: json 

樣品jobs領域:[{"company_id": 1, "title": "Engineer" }, {"company_id": 2, "title": "Accountant"}]

鑑於公司ID,是否有一種方式來運行一個SQL語句(Postgres的9.4),可以提取已在該公司工作的所有用戶ID?喜歡的東西:

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

回答

2

可能不是做的最好的辦法,但這個工程:

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

謝謝!這工作。我接受這個,因爲這也適用於'json'字段類型。 @jgm的另一個答案也適用,但它需要你的字段是'jsonb'。 – huy

1

這應該做的伎倆:

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

只需注意:使用這個需要'jsonb'數據類型,不會與'json'一起工作 –

+1

確實如此,但如果你在9.4你真的應該使用jsonb,除非你有一個特定的需求排除它。 – jgm

+0

是的,這就是爲什麼只是一個筆記。當然,對於一次性性能不敏感的查詢,總是可以將json轉換爲jsonb。 –

相關問題