当我使用left join
with 时for json path
出现错误:
由于与其他列名或别名冲突,无法在 JSON 输出中生成属性“product_id”。对 SELECT 列表中的每一列使用不同的名称和别名。
从这个查询:
select top 1
1 as [foo.bar],
p.*, cp.*
from product p
left JOIN company_product cp on cp.product_id = p.product_id
for json path
当我更改为时for json path
,for json auto
它不会抛出错误,但结果未按预期输出:
[{ "foo.bar": 1, "product_id": 751, ... "cp": [{ "product_id": 751, "company_id": 273, .. }]
当我移动1 as [foo.bar]
到选择的末尾时,它会产生另一个问题:
select top 1
p.*, cp.*,
1 as [foo.bar]
from product p
left JOIN company_product cp on cp.product_id = p.product_id
for json auto
的foo.bar
是内部 cp
的对象。它并不像预期的那样:
[{ "product_id": 751, ... "cp": [{ "product_id": 751, "company_id": 273, "foo.bar": 1, ..}]
相反应该是:
[{ "product_id": 751, ... "cp": [{ "product_id": 751, "company_id": 273, ..}], "foo.bar": 1, ..}]
所以当我使用for json auto
. 任何想法,如果有使用的方式left join
与for path
或解决这个问题,这for auto
使得?
如文档中所述,当...指定 AUTO 选项时,JSON 输出的格式将根据 SELECT 列表中的列顺序及其源表自动确定...您...可以' t 改变这种格式。因此,一个可能的选择是使用子查询:
表格:
SELECT *
INTO product
FROM (VALUES (751)) v (product_id)
SELECT *
INTO company_product
FROM (VALUES (751, 273), (751, 274)) v (product_id, company_id)
陈述:
SELECT p.*, cp.*
FROM (
SELECT *, 1 as [foo.bar]
FROM product
) p
LEFT JOIN company_product cp on cp.product_id = p.product_id
FOR JSON AUTO
结果:
[
{
"product_id":751,
"foo.bar":1,
"cp":[
{"product_id":751, "company_id":273},
{"product_id":751, "company_id":274}
]
}
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句