SQL Server从两个表中选择数据作为数组

时间:2018-04-13 10:30:51

标签: sql sql-server node.js

我有一个数据库,其中有两个表tableA, tableB。现在,对于tableA中的每个主要ID,tableB中可能有多行。

表A 主键(ServiceOrderId)

+----------------+-------+-------+-------------+
| ServiceOrderId | Tax   | Total | OrderNumber |
+----------------+-------+-------+-------------+
| 12             | 45.00 | 347   | 1011        |
+----------------+-------+-------+-------------+

表B 外键(ServiceOrderId)

+----+-------------+---------------------+----------+-------+------+----------------+
| Id | ServiceName | ServiceDescription  | Quantity | Price | Cost | ServiceOrderId |
+----+-------------+---------------------+----------+-------+------+----------------+
| 39 | MIN-C       | Commercial Pretreat | NULL     | 225   | 23   | 12             |
+----+-------------+---------------------+----------+-------+------+----------------+
| 40 | MIN-C       | Commercial Pretreat | NULL     | 225   | 25   | 12             |
+----+-------------+---------------------+----------+-------+------+----------------+

是否有一种方法可以将值作为具有单行tableA的多行tableB的数组获取。因为当我保存到数据库时,我使用临时表来保存具有单行tableA的多行tableB。

查询我正在使用

SELECT  
    ordr.*,
    info.*
FROM 
    tblServiceOrder as ordr
JOIN 
    tblServiceOrderInfo as info ON ordr.ServiceOrderId = info.ServiceOrderId

但是上面的查询为每个ServiceOrderId提供了两行。我正在使用节点api来获取数据。我想要类似的东西;

Object:{
        objectA:{id:12,tax:45.00:total:347,ordernumber:1011}, 
        objectB:[
           {id:39,servicename:'MIN-C',description:'Commercial Pretreat',Quantity :NULL,Price:225,Cost:23,ServiceOrderId:12 },
           {id:40,servicename:'MIN-C',description:'Commercial Pretreat',Quantity :NULL,Price:225,Cost:25,ServiceOrderId:12}
          ]
       }

1 个答案:

答案 0 :(得分:0)

有几种解决方案。第一个是使用SELECT,但是添加了ORDER BY ServiceOrderID,当数据转换为object时,只在循环中使用第一行,从 ordr 表中为新的ServiceOrderId添加并添加每一行来自 info 表的数据。

其他可能性是仅从 ordr 表中选择数据,并且每行都可以通过 info 表中的ServiceOrderId进行另一次选择。此解决方案不应用于大型表。