N1QL查询where条件中子查询单独正常但整体无返回结果问题
问题原因
- N1QL 普通子查询默认返回对象数组,而非单个标量值。你单独执行子查询看到的
sls::76543_77实际是数组内对象的字段值,完整返回结构为[{"DocId": "sls::76543_77"}],直接用=对比字符串类型的T1.Id和数组对象,无法命中匹配。 - 等值运算符
=仅支持标量与标量的对比,无法完成标量和数组的包含匹配逻辑。
解决方法
方案1:适配多返回值场景(推荐)
使用 RAW 关键字改造子查询,直接返回字段值组成的纯值数组,搭配 IN 运算符完成包含匹配,兼容子查询返回1个或多个结果的情况:
SELECT T1.* FROM `masterdata` AS T1 WHERE T1.doc="Calendar" AND T1.Id IN ( SELECT RAW SL.DocId FROM `masterdata` AS T UNNEST T.Sllist AS SL WHERE T.doc="Cuslist" AND GtId IN ["1234567"] )
方案2:适配单返回值场景
如果确认子查询永远只会返回1条结果,可以直接取数组第一个元素的DocId字段做等值匹配:
SELECT T1.* FROM `masterdata` AS T1 WHERE T1.doc="Calendar" AND T1.Id=( SELECT SL.DocId FROM `masterdata` AS T UNNEST T.Sllist AS SL WHERE T.doc="Cuslist" AND GtId IN ["1234567"] )[0].DocId
补充说明:如果改造后仍然返回空结果,可检查
GtId字段的所属层级,确认是属于T文档还是SL下的嵌套字段,避免字段归属错误导致匹配失效。
内容的提问来源于stack exchange,提问作者Doss
相关产品推荐
相关产品推荐

