问题描述
列数据的类型为 jsonb
此处按电话号码过滤查询:
SELECT id,data,CASE states->0->>'id'
WHEN 'order.completed' THEN 'completed'
ELSE 'progress'
END AS order_state
FROM myTable
WHERE data->'contacts'->'customer'->>'phone' LIKE '%123456%'
好。很好。
但是现在我也想按别名 order_state 进行过滤。
我尝试这个:
SELECT id,CASE states->0->>'id'
WHEN 'order.completed' THEN 'completed'
ELSE 'progress'
END AS order_state
FROM myTable
WHERE data->'contacts'->'customer'->>'phone' LIKE '%123456%' AND order_state = 'progress'
但是我得到了错误:
ERROR: column "order_state" does not exist
LINE 7: ...s'->'customer'->>'phone' LIKE '%123456%' AND order_stat...
解决方法
您的条件必须基于基本值。
... WHERE ... AND states->0->>'id' <> 'order.completed';
这使CASE选择变得毫无意义。