在SQL SELECT多参数过滤时能否使用点导航访问嵌套字段?
问题
本人刚接触SQL,想要仅检索特定groupID的记录,使用了如下查询语句:
SELECT @Date, Capacity, UserOrUserGroup FROM UCTimePhaseMonthly WHERE Date >= 2023-05-01 AND UserOrUserGroup.id = '/User/fdwr6cs6msxapw5zh4bh5jj93'
返回的单条数据示例如下:
[ { "id": "/UCTimePhaseMonthly/2z1r4vdk3d8qk16uegexx5rxx3453", "Date": "2023-06-01T00:00:00.0000000", "Capacity": { "unit": "Hours", "value": 176 }, "UserOrUserGroup": { "id": "/User/fdwr6cs6msxapw5zh4bh5jj93" } } ]
请问当id字段嵌套在UserOrUserGroup中时,在SQL SELECT的多参数过滤(比较)操作里能否使用点导航?
回答
能不能用点导航访问嵌套字段,完全看你使用的数据库系统:
- 标准SQL本身不支持这种直接的点语法,但不少现代数据库(比如PostgreSQL、SQL Server、MySQL 8.0及以上版本)针对JSON类型的嵌套字段,都提供了类似点导航的写法支持。
- 从你的查询结果就能看出来,当前使用的数据库是支持
UserOrUserGroup.id这种写法的——毕竟你的语句已经成功查出了目标数据,说明这个语法在你当前环境下是有效的。 - 如果换用不支持这种写法的数据库,就得用对应的数据提取函数来获取嵌套值再做过滤,比如PostgreSQL用
->>、SQL Server用JSON_VALUE等。
内容的提问来源于stack exchange,提问作者mrbangybang
相关产品推荐
相关产品推荐

