Как объединить таблицу JSON с другой реляционной таблицей в элементах массива json oracle12c? - PullRequest
0 голосов
/ 25 августа 2018

Используя Oracle Database 12c, у меня есть структура JSON, как показано ниже.

Этот запрос не может вернуть результаты, хотя в учетной записи и таблице ACCOUNTDETAILS имеются соответствующие записи (role = B является вторым элементом в массиве party).

тот же запрос работает, когда я запрашиваю act.ROLE = "A" (первый элемент в массиве party).

Accounts TABLE

{
"id":"1223",
"parties":[
{
"crossReference":[
 {
    "crsrefvalue":"z123A",
   ---
 }
                              ],
                 "role":"A"
},
{
"crossReference":[
    {
       "crsrefvalue":"z123B",
      ---
}
],
             "role":"B"
}
  ]
}


wanted to join this account table with ACCOUNTDETAILS(columns crsrefvalue,crsrefname) on value account.crsrefvalue=ACCOUNTDETAILS.crsrefvalue and account.parties.role="B"

json query is like below
With ACCT  AS (
SELECT  ID, crsrefvalue, ROLE  from account,
  JSON_TABLE(JSON,’$’ COLUMNS(ID PATH ‘$.ID’,
       NESTED PATH ‘$.PARTIES[*]’ COLUMNS(ROLE PATH ‘.ROLE’, NESTED PATH ‘$.crossReference[*]’  COLUMNS(crsrefvalue PATH ‘$.crsrefvalue’)))) JS_TAB
)   

SELECT  FROM  ACCOUNTDETAILS dtls, ACCT  act where act.crsrefvalue= dtls.crsrefvalue and act.ROLE ="B"

**problem 1)** this query could not return result though matching records are available in account and ACCOUNTDETAILS table.(role=B is second element in parties array)
the same query works when i query for act.ROLE ="A"(first element in parties array)
...