Postgresql

SQL(Postgres):查詢數組列必須是數組的子集

  • February 27, 2022

我有一個表格“文章”,每個條目都儲存了一些“標籤”(數組列)

name   |   tags

test1  | {t1,t3}
test2  | {t2,t3}
test3  | {t3}
test4  | {t1,t5} 
test5  | {t1,t3}
test6  | {t2,t3} 

我可以查詢作為數組傳遞的標籤:

SELECT name, tags FROM article WHERE tags && array['t1','t3','t10']::_varchar

這是可行的,但我實際上想要實現的是,當條目的所有標籤都在傳遞的數組中時,只會返回條目。(不只是1)

在此處輸入圖像描述

使用 contains 運算符<@檢查 tags 數組是否包含“other”數組的所有元素

SELECT name, tags 
FROM article 
WHERE tags <@ array['t1','t3','t10']::varchar[]

線上範例

SELECT * FROM test WHERE tags <@ '["t1","t3","t10"]'::JSONB; 
-- or
SELECT * FROM test WHERE tags <@ TO_JSONB(ARRAY['t1','t3','t10'])

https://dbfiddle.uk/?rdbms=postgres_14&fiddle=55ff28e62e884047187c9e9f275934f4

tags必須是 JSONB 數據類型的列。如果沒有,則將其轉換為 JSONB。

引用自:https://dba.stackexchange.com/questions/307991