ANY/ALL(数组)不支持设置参数
ANY/ALL (array) does not support set arguments
我有一个 jsonb
列,其中包含有关促销活动的详细信息。
我想过滤预定义列表中的键。
我应用了对我来说很直观的东西,一个 where code in ('foo', 'bar')
但这引发了一个错误:ANY/ALL (array) does not support set arguments
有什么想法吗?
查询:
select
upper(jsonb_object_keys(orders.extra_details -> 'promotion_codes')) as promo_code,
count(tickets.id)
from
tickets
inner join order_items on order_items.orderable_id = tickets.id
inner join orders on orders.id = order_items.order_id
where
order_items.type = 'TicketOrderItem'
and orders.extra_details -> 'promotion_codes' is not null
and tickets.event_id = 4062
and tickets.status = 2
and upper(jsonb_object_keys(orders.extra_details -> 'promotion_codes')) in ('FOO', 'BAR', 'BAZ')
group by
1
order by
1
jsonb_object_keys
returns 一组 值。你不应该在 select
列表中使用它,你不能真正在 where 子句中使用它。
就像使用这样的表达式:where (select some_column from some_table) in ('a','b')
正确的使用方法是将查询加入 jsonb_object_keys
的结果
select upper(ed.promo_code) as promo_code,
count(tickets.id)
from tickets
join order_items on order_items.orderable_id = tickets.id
join orders on orders.id = order_items.order_id
join lateral jsonb_object_keys(orders.extra_details -> 'promotion_codes') as ed(promo_code) on true
where
order_items.type = 'TicketOrderItem'
and orders.extra_details -> 'promotion_codes' is not null
and tickets.event_id = 4062
and tickets.status = 2
and upper(ed.promo_code) in ('FOO', 'BAR', 'BAZ')
group by
1
order by
1
我有一个 jsonb
列,其中包含有关促销活动的详细信息。
我想过滤预定义列表中的键。
我应用了对我来说很直观的东西,一个 where code in ('foo', 'bar')
但这引发了一个错误:ANY/ALL (array) does not support set arguments
有什么想法吗?
查询:
select
upper(jsonb_object_keys(orders.extra_details -> 'promotion_codes')) as promo_code,
count(tickets.id)
from
tickets
inner join order_items on order_items.orderable_id = tickets.id
inner join orders on orders.id = order_items.order_id
where
order_items.type = 'TicketOrderItem'
and orders.extra_details -> 'promotion_codes' is not null
and tickets.event_id = 4062
and tickets.status = 2
and upper(jsonb_object_keys(orders.extra_details -> 'promotion_codes')) in ('FOO', 'BAR', 'BAZ')
group by
1
order by
1
jsonb_object_keys
returns 一组 值。你不应该在 select
列表中使用它,你不能真正在 where 子句中使用它。
就像使用这样的表达式:where (select some_column from some_table) in ('a','b')
正确的使用方法是将查询加入 jsonb_object_keys
select upper(ed.promo_code) as promo_code,
count(tickets.id)
from tickets
join order_items on order_items.orderable_id = tickets.id
join orders on orders.id = order_items.order_id
join lateral jsonb_object_keys(orders.extra_details -> 'promotion_codes') as ed(promo_code) on true
where
order_items.type = 'TicketOrderItem'
and orders.extra_details -> 'promotion_codes' is not null
and tickets.event_id = 4062
and tickets.status = 2
and upper(ed.promo_code) in ('FOO', 'BAR', 'BAZ')
group by
1
order by
1