PostgreSQL查询需求:筛选Field2不匹配Field1字符串的记录
PostgreSQL 查询:筛选Field2与Field1无匹配子串的记录
需求说明
需要从数据表中筛选出Field2包含至少一个不在Field1下划线分割子串中的记录——当Field2的所有空格分割子串都能在Field1的下划线分割子串中找到时,过滤该记录。
查询语句
假设数据表名为your_table,执行以下SQL:
SELECT Field1, Field2 FROM your_table WHERE NOT ( SELECT bool_and(elem = ANY(string_to_array(Field1, '_'))) FROM unnest(string_to_array(Field2, ' ')) AS elem );
逻辑解释
string_to_array(Field1, '_'):将Field1按下划线分割为字符串数组,例如abc_id_test_scenario会转为['abc', 'id', 'test', 'scenario']string_to_array(Field2, ' '):将Field2按空格分割为字符串数组,例如cde test会转为['cde', 'test']unnest(...):将Field2的数组拆分为独立行bool_and(elem = ANY(...)):检查Field2的每个子串是否都存在于Field1的分割数组中,全匹配则返回true- 外层
NOT:排除全匹配的记录,保留存在不匹配子串的记录
示例验证
针对输入数据表执行上述查询,会得到期望输出:
| Field1 | Field2 |
|---|---|
| abc_id_test_scenario | cde test |
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

