【问题标题】:Unable to fetch results when JSON includes sql keywords [duplicate]当 JSON 包含 sql 关键字时无法获取结果 [重复]
【发布时间】:2019-05-01 17:41:49
【问题描述】:

我正在尝试在 cosmos db 上获取符合特定条件的记录,但我一直无法做到,看起来 cosmos 正在抱怨 left 而我一直无法找到替代方案。

这是我一直在尝试获取记录的查询:

SELECT * 
FROM Rx c 
where c.tenantId = '5c6cb2d77c1c2edc001b9007' AND 
      c.left.series ='Clariti 1 Day Toric 30pk'

下面是一个示例 JSON 文档

{
"startDate": null,
"expirationDate": null,
"left": {
    "seriesId": "54b80bae7558391d0044ffd7",
    "productId": null,
    "productName": null,
    "series": "Clariti 1 Day Toric 30pk"
},
"right": null,
"tenantId": "5c6cb2d77c1c2edc001b9007"
}

这是返回的错误: 语法错误,'left' 附近的语法不正确。

【问题讨论】:

  • 我试过了,语法错误消失了,但没有返回结果。 SELECT * FROM Rx c where c.tenantId = '5c6cb2d77c1c2edc001b9007' AND c.series='Clariti 1 Day Toric 30pk' SELECT * FROM Rx c where c.tenantId = '5c6cb2d77c1c2edc001b9007' AND "left.series"='Clariti 1 Day Toric 30pk'
  • JSON 字段命名为 left.series,我们是 Cosmos 的新手。如果 dataexplorer 因为 left 是关键字而抱怨,我们是否应该考虑重命名该字段?
  • 您是否尝试过使用引号?另一个问题与您的问题非常相似:stackoverflow.com/questions/30849310/…
  • 谢谢,在您发送链接之前我无法找到它,是的,这就是我正在寻找的解决方案。
  • 此外,除了@JaimeDrq 共享的现在标记为重复的问题链接之外,我还发布了一个相关问题的答案,关于在属性名称中使用特殊字符,也需要括号正确解决。 link

标签: sql azure azure-cosmosdb cosmos


【解决方案1】:

当您查询嵌套对象时,您的查询应使用 [] 而不是 dot

方括号表示法允许您访问包含特殊字符的属性

SELECT * 
FROM Rx c 
where c.tenantId = '5c6cb2d77c1c2edc001b9007' AND 
      c["left"]["series"] ='Clariti 1 Day Toric 30pk'

演示

【讨论】:

  • 谢谢萨吉塔兰!没有语法错误,我得到了一个结果集。
  • 只是想知道,如果不使用 id,那么在没有完全扫描的情况下满足 Where 条件的好索引是什么?谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2021-02-17
  • 2014-07-28
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多