Oracle Json函数未返回我预期的结果

问题描述

我有一个带有oracle json列的表,并使用json SQL查询函数JSON_TEXTCONTAINS,如下所示,我使用多个JSON_TEXTCONTAINS并与or / and运算符联接:

select json_value(json_value,'$.customerIdCode'),json_value(json_value,'$.TYPE')
 FROM addcols_json addjson
  WHERE (JSON_TEXTCONTAINS (addjson.json_value,'$.TYPE','ZHS')
    or JSON_TEXTCONTAINS (addjson.json_value,'ABC'))
       and (JSON_TEXTCONTAINS(    addjson.json_value,'$."customerIdCode"','967')
           or JSON_TEXTCONTAINS(    addjson.json_value,'351'));

期望如下查询结果:

customerIdCode  TYPE
967             ZHS,XXX
351             XXX,ABC

但是我明白了:

customerIdCode  TYPE
967             ZHS,ABC
123             ZHS,XXX

我没想到的是低于customerIdCode(123)匹配的记录 oerpator而不在我的查询中起作用。

customerIdCode  TYPE
123             ZHS,XXX

有人知道为什么,可以给我一些建议吗?

谢谢。

只需编辑我的问题,希望可以表达得更清楚。

解决方法

是因为ZSH

967 ZHS,XXX        --> you have ZHS here (for 967)
351 XXX,ABC
123 ZHS,XXX        --> but,you have ZHS here as well (for 123)

如查询所述

WHERE (JSON_TEXTCONTAINS (addjson.json_value,'$.TYPE','ZHS')
                                                       ^^^
                                                       here

你得到了……好吧,你得到了什么。