【发布时间】:2020-09-29 06:40:42
【问题描述】:
我有一个 sql 查询,它将检查一个名为 USER_PROFILE_ENTRY 的表在下面给出的特定 where 子句下的 STRING_VAL 并将其设置为 extension_locale强>
Select extension_locale = (select STRING_VAL from USER_PROFILE_ENTRY
where PROFILE_KEY = 'Culture' and ottr.USER_ID = USER_PROFILE_ENTRY.USER_ID)
from USER_DATA ottr where USER_TYPE = 'U'
FOR JSON PATH
where 子句中的 ottr.USER_ID 来自名为 USER_DATA 的表,因此当您运行以下查询并且没有满足此条件的值时 -> ottr.USER_ID = USER_PROFILE_ENTRY.USER_ID 则不会返回任何内容
select STRING_VAL from USER_PROFILE_ENTRY
where PROFILE_KEY = 'Culture' and ottr.USER_ID = USER_PROFILE_ENTRY.USER_ID
但我想要的是,如果上面 where 条件没有值,它应该打印 扩展时区 = "" 而不是根本不打印任何东西。
以下是上述查询的输出:
[
{},
{
"extension_locale": "en-US"
},
{},
{
"extension_locale": "en-US"
},
{
"extension_locale": "en-GB"
},
{},
{},
{
"extension_locale": "en-GB"
},
{
"extension_locale": "en-GB"
},
{
"extension_locale": "en-GB"
}
]
所以如果你看到输出,有很多 {} (空块),这意味着没有令人满意的 where 子句因此和空输出,但我想要的是这样的:
[
{
"extension_locale": ""
},
{
"extension_locale": "en-US"
},
{
"extension_locale": "en-US"
},
{
"extension_locale": "en-GB"
},
{
"extension_locale": ""
},
{
"extension_locale": ""
},
{
"extension_locale": "en-GB"
},
{
"extension_locale": "en-GB"
},
{
"extension_locale": "en-GB"
}
]
【问题讨论】:
-
对于 2008 年的 json 路径?你是巫师吗?
-
你能发布测试数据吗?另请注意,SQL Server 2016 中引入了 JSON 支持,因此
sql-server-2008标记似乎是错误的。您的实际 SQL Server 版本是多少? -
你想要什么类型的测试数据?我有 2 个表,一个是 USER_DATA,另一个是 USER_PROFILE_ENTRY,两个表都有一个公共列,即我在 where 子句中使用的 USER_ID
-
不是这样的。阅读sql tag info 和edit 中的指南,并使用适当的示例数据来解决您的问题 - 并修复错误的标签。那我也许能帮你。
-
@ZoharPeled 我有 2 个表,一个是 USER_DATA,另一个是 USER_PROFILE_ENTRY,两个表都有一个公共列,即我在 where 子句中使用的 USER_ID。我希望我能让你明白
标签: sql json sql-server