Postgresql
SQL(Postgres):查詢數組列必須是數組的子集
我有一個表格“文章”,每個條目都儲存了一些“標籤”(數組列)
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。