对 PostgreSQL JSONB 列的过滤不起作用

Filtering on PostgreSQL JSONB column doesn't work

我将以下 JSON 存储在 jsonb 类型的列中。我想查询外部数组的第二个元素并过滤所有在 'cid' 列中具有值的行作为 'CID1'.

{"root":[[
            {"cid":"CID1","Display":"User One","FName":"User","LName":"One"},
            {"cid":"CID1","Display":"User Two","FName":"User","LName":"Two"},
            {"cid":"CID1","Display":"User Three","FName":"User","LName":"Three"},
            {"cid":"CID2","Display":"User One","FName":"User","LName":"One"},
            {"cid":"CID2","Display":"User Two","FName":"User","LName":"Two"},
            {"cid":"CID2","Display":"User Three","FName":"User","LName":"Three"}    

            ],
            [
            {"cid":"CID1","Display":"User One","FName":"Userfff","LName":"One"},
            {"cid":"CID1","Display":"User Two","FName":"User","LName":"Two"},
            {"cid":"CID1","Display":"User Three","FName":"User","LName":"Three"},
            {"cid":"CID2","Display":"User One","FName":"User","LName":"One"},
            {"cid":"CID2","Display":"User Two","FName":"User","LName":"Two"},
            {"cid":"CID2","Display":"User Three","FName":"User","LName":"Three"}    
            ]]}

我编写了以下查询,并成功地从第二个数组中检索所有行作为 JSON 对象,但是当我尝试过滤它们时,我得到错误

42703: column "filterin" does not exist

select jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele ))[2]::jsonb) filterin 
from js
where filterin->>'cid'='CID1';

我应该在以下查询中更正哪些内容以便能够对列进行筛选?

WHERE 部分不能使用输出别名。您有两个选择:子查询或复制定义。

select jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele ))[2]::jsonb) filterin
from js
where jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele ))[2]::jsonb)->>'cid'='CID1';

SELECT filterin FROM 
(select jsonb_array_elements((ARRAY(select jsonb_array_elements(msg->'root') ele ))[2]::jsonb) filterin
from js) data
WHERE filterin->>'cid'='CID1';