[英]How to query array stored column in Postgres, (array intersection)
我有一個表格,其中包含類似這樣的數組值。
id | contents_id
1 | [1, 3, 5]
2 | [1, 2]
3 | [3, 4, 6]
4 | [2, 5]
如何編寫查詢數組,例如[1, 2]
,以便它檢查數組的值不是整個數組?
如果找到任何常見的數組值,則獲取所有元組。
如果查詢[1, 2]
,它必須從上表中獲取id
=> 1, 2, 4
,因為它包含1
或2
。
考慮使用intarray擴展。 它提供了一個用於測試整數數組重疊的&&運算符。 這是一個小提琴,舉個例子。
select id from test where ARRAY[1,2] && contents_id;
雖然您可以使用運算符查詢它,但我認為最好使用整數ID創建聯結表。
在@LaposhasúAcsa建議的1-D int數組&&
運算符arrayoverlap
是最快的。
所以我的答案只有在arrayoverlap
不可用或想要使用除一維整數數組以外的任何東西時才會有效。
檢查UNNEST
https://www.postgresql.org/docs/current/static/functions-array.html
CREATE TABLE t45407507 (
id SERIAL PRIMARY KEY
,c int[]
);
insert into t45407507 ( c) values
(ARRAY[1,3,5])
, (ARRAY[1,2])
, (ARRAY[3,4,6])
, (ARRAY[2,5]);
select DISTINCT id from
(SELECT id,unnest(c) as c
from t45407507) x
where x.c in (1,2);
可以通過LATERAL
加入縮短
select DISTINCT id from
t45407507 x,unnest(c) ec
where ec in (1,2);
FROM
子句中的逗號(,)是CROSS JOIN
簡短表示法。 自動假設LATERAL
用於表函數,例如unnest()
。
重寫WHERE
以使用ARRAY
作為參數
SELECT DISTINCT id FROM
t45407507 x,unnest(c) ec
WHERE ec = ANY(ARRAY[1,2]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.