PostgreSQL中如何筛选t_col所有元素都存在于f_col的行?
PostgreSQL:筛选t_col所有元素均存在于f_col中的行
我在PostgreSQL数据库中有两张带共同ID的表,每张表各包含一个varchar[]类型的列。需要返回所有t_col的元素都存在于f_col中的行(f_col可包含额外元素)。
我尝试用自连接写了以下查询,但未得到正确结果:
select * from t1 a, t2 b where a.id=b.id and not (a.f_col @> b.t_col)
正确查询语句
要实现需求,直接使用数组包含操作符@>即可,不需要添加not。正确的查询如下:
select * from t1 a join t2 b on a.id = b.id where a.f_col @> b.t_col;
说明
- 操作符
@>的作用是判断左侧数组是否包含右侧数组的全部元素,完全匹配你的需求:t_col的所有元素都存在于f_col中 - 推荐使用显式的
JOIN语法替代老式的逗号分隔表写法,代码可读性更强
内容的提问来源于stack exchange,提问作者user20826430
相关产品推荐
相关产品推荐

