javascript 在nodeJ上,SQL Server是否可以将联接表返回为对象数组?

r6hnlfcb  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(127)

我的表数据是:

**partMaster**

         id        partNumber      rev     
    |------------|------------|------------|
    |    01      | assy1      |    C       |
    |------------|------------|------------|
    |    02      | comp1      |    A       |
    |------------|------------|------------|
    |    03      | comp2      |    F       |
    |------------|------------|------------|

                    **boms**

         id        partId         itemId        qty     
    |------------|------------|------------|------------|
    |    01      | 01         |    02      |    5       |
    |------------|------------|------------|------------|
    |    02      | 01         |    03      |    11      |
    |------------|------------|------------|------------|

我的问题是

SELECT *
FROM partMaster
left join boms on boms.partId = partMaster.id
WHERE (partMaster.id = '01')

这将返回(沿着其他内容)一个记录集,例如,

[
    {
        id:[01,01],
        partNumber:'ASSY1'
        rev:'C',
        itemId:'02',
        qty:5
    }
,
   {
        id:[01,01],
        partNumber:'ASSY1'
        rev:'C',
        itemId:'03',
        qty:11
    }
]

这对我来说很困惑。我更喜欢这样的东西,

[{
id:01,
partNumber:'assy1',
rev:'c'
boms:[{id:01,partId:01,itemId:02,qty:5},{id:02,partId:01,itemId:03,qty:11}] //Left Joined Table 
}]

SQL Server(或任何NodeJ兼容的SQL数据库)是否可以实现这一点?

rta7y2nd

rta7y2nd1#

如果您使用的是SQL Server 2016或更高版本,则可以使用FOR JSON

SELECT
    p.id,
    p.partNumber,
    p.rev,
    (SELECT b.id, b.partId, b.itemId, b.qty FOR JSON PATH) as boms
FROM partMaster p
left join boms b on b.partId = p.id
WHERE (p.id = '01');

附注:最好不要在代码中使用SELECT *。在结果集中只返回所需的内容。表模式会随着时间的推移而变化,这使得SELECT *的结果也会变化。

相关问题