user1117605 Asked: 2022-02-26 12:22:34 +0800 CST2022-02-26 12:22:34 +0800 CST 2022-02-26 12:22:34 +0800 CST SQL(Postgres):查询数组列必须是数组的子集 772 我有一个表格“文章”,每个条目都存储了一些“标签”(数组列) 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) postgresql query 2 个回答 Voted Best Answer a_horse_with_no_name 2022-02-26T13:09:08+08:002022-02-26T13:09:08+08:00 使用 contains 运算符<@检查 tags 数组是否包含“other”数组的所有元素 SELECT name, tags FROM article WHERE tags <@ array['t1','t3','t10']::varchar[] 在线示例 Akina 2022-02-26T13:24:40+08:002022-02-26T13:24:40+08:00 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。
使用 contains 运算符
<@
检查 tags 数组是否包含“other”数组的所有元素在线示例
https://dbfiddle.uk/?rdbms=postgres_14&fiddle=55ff28e62e884047187c9e9f275934f4
tags
必须是 JSONB 数据类型的列。如果没有,则将其转换为 JSONB。