我有一个表名doc_definition
与json
列definition
具有类似的格式:如何从两个不同的表中查询JSON数组?
[{
"id":"0",
"name:"Ques1"
},{
"id":"1",
"name:"Ques2"
},{
"id":"2",
"name:"Ques3"
}]
,并为具有另一json
列def_val
与格式另一个表doc
:
{
"0":{
"value":"Ans1"
},
"1":{
"value":"Ans2"
},
"2":{
"value":"Ans3"
}
}
我想创建一个Postgres SQL查询,通过匹配两个json中的id字段来给出相应问题的值。 到目前为止,我想出了这一点:
SELECT json_array_elements(def.definition) ->> 'name' AS json_test
FROM document_definitions AS def
INNER JOIN documents AS doc
ON doc.document_definition_id = def.id
WHERE doc.id = 892 AND json_array_elements(def.definition) ->> 'name' = 'Ques2'
但这抛出异常:
ERROR: argument of AND must not return a set
当我把json_array_elements(def.definition) ->> 'name' = 'Ques2'
在SELECT
条款,它返回boolean值。
我不知道什么是错的。 Plz帮助?
你得重新考虑.... json_arra_elements'的'定义为'扩展JSON数组一组JSON values.' ..That的为什么第一次查询失败。进一步,。因为在该组值'Ques2'存在的情况下,第二个查询返回true ...阅读此https://www.postgresql.org/docs/9.5/static/functions-json.html并尝试重新考虑您的方法 –
@ JasonKrs我重新思考了我的方法,并提出了一个适用于我的查询。我已将它发布在答案中。如果有什么我可以改进的,请告诉我。 – dARKaRK1002