首页 > 解决方案 > SQL 与数组内的过滤器重叠

问题描述

以前我尝试使用重叠来查找数据在数组中具有任何值的数据。我使用 postgres

SQL 语句为:

SELECT *,
ARRAY_AGG("reserve"."state_id" ) AS "states" 
FROM "orders_order"
JOIN "reserve" ON ("order"."id" = "reserve"."order_id")
GROUP BY "order"."id"
HAVING (ARRAY_AGG("reserve"."state_id" )&& array['test', 'test_new']::varchar(255)[])

例如,如果我的状态如下所示:

{'test', 'new_test' }

如果状态test在数组中,它会给我所有的储备

现在我需要接收状态,如果只是['test']在数组中

上述示例中的预期输出必须为空

一些例子来澄清:

1. {'test', 'new_test' } -> false
2. {'test', 'test' } -> true
3. {'test'} -> true

我怎样才能做到这一点。我的 SQL 语句需要添加什么?

标签: sqlarrayspostgresql

解决方案


您正在寻找@>(包含运算符):

SELECT 
 array['test'] @> array['test','new_test'], --false
 array['test'] @> array['test','test'],     --true
 array['test'] @> array['test'];            --true

 ?column? | ?column? | ?column? 
----------+----------+----------
 f        | t        | t

推荐阅读