我正在将一些数据从 MS SQL Server 数据库导出为 JSON。
有两张表,从表A到表B都有外键。是0多关系,即。表 A 中的一条记录可能在表 B 中有一些数据,但不是必须的。表 A 包含人员记录,表 B 是他们当前和以前的地址的列表。
我使用此语句来获取 JSON 数据:
SELECT
A.Firstname,
A.LastName,
HistoricAddresses.AddressLine1
HistoricAddresses.AddressLine2
FROM
People A
LEFT JOIN
HistoricAddresses ON HistoricAddresses.PeopleId = A.Id
FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)
这会产生如下所示的 JSON 结构:
[
{
"Firstname": "xyz",
"Lastname": "xyz",
"HistoricAddresses": [
{
"AddressLine1": "abc",
"AddressLine2": "abc"
},
// more historic address records follow
]
},
// more records follow
]
Run Code Online (Sandbox Code Playgroud)
这一切都很好,直到 A 表中的一条记录在 B 表中没有任何记录为止。在这种情况下,JSON 如下所示:
[
{
"Firstname": "xyz",
"Lastname": "xyz",
"HistoricAddresses": [
{}
]
},
// more records follow
]
Run Code Online (Sandbox Code Playgroud)
HistoricAddresses 属性的内容是一个具有单个空元素的数组。它应该只是一个空数组。
有办法实现吗?
我通过不使用 LEFT JOIN 而是使用子选择解决了这个问题。
代替
SELECT
A.Firstname,
A.LastName,
HistoricAddresses.AddressLine1
HistoricAddresses.AddressLine2
FROM
People A
LEFT JOIN
HistoricAddresses ON HistoricAddresses.PeopleId = A.Id
FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)
我现在正在使用
SELECT
A.Firstname,
A.LastName,
(SELECT
HistoricAddress.AddressLine1,
HistoricAddress.AddressLine2
FROM
HistoricAddress
WHERE
HistoricAddress.PeopleId = A.Id
FOR JSON AUTO) AS HistoricAddresses
FROM
People A
FOR JSON AUTO
Run Code Online (Sandbox Code Playgroud)
这完全忽略了 HistoricAddresses JSON 属性(如果没有)。我的解析器可以处理它。
不过,我还没有对其进行基准测试,因此绝对欢迎其他解决方案。
归档时间: |
|
查看次数: |
5790 次 |
最近记录: |