使用Express,node,MSSQL包为应用程序创建后端,我希望在发送到客户端之前尽可能多地在服务器上进行处理。
我需要运行两个查询,但是我需要在发送到客户端之前以特定方式组合数据。
第一个查询收集的数据将是一对一关系,另一个是一对多关系。我想将一对多附加到一对一上。
第一次查询:
select updatedInfo.*,
nameInfo.*, nameInfo.updated as nameUpdated, nameInfo.alreadyCorrect as nameWasCorrect,
addressInfo.*, addressInfo.alreadyCorrect as addWasCorrect, addressInfo.updated as addUpdated,
phoneInfo.*, phoneInfo.alreadyCorrect as phoneWasCorrect, phoneInfo.updated as phoneUpdated,
emailInfo.*, emailInfo.alreadyCorrect as emailWasCorrect, emailInfo.updated as emailUpdated
from updatedInfo join nameInfo on updatedInfo.IndivId=nameInfo.nameInfoId
join addressInfo on updatedInfo.IndivId=addressInfo.addressInfoId
join emailInfo on updatedInfo.IndivId=emailInfo.emailInfoId
join phoneInfo on updatedInfo.IndivId=phoneInfo.phoneInfoId
where updatedInfo.correctedInFNV is not null
order by updatedInfo.IndivId
第二个查询: ID是传递给查询的变量
select * from positionInfo where IndivId='${id}'
如何将第二个查询结果附加到正确记录中的第一个查询结果?
我正在使用mssql包并使用它:
var sqlConfig = {
server: 'IP',
database: 'db',
user: 'sweeper',
password: 'pass'
}
const connPool = new mssql.ConnectionPool(sqlConfig, err => {
console.error(err);
});
var query = {
getAllUpdatedPool: () => {
connPool.Request().query(`----first query ----`)
.then((set) => {
console.log(set);
return set;
}).catch((err) => {
console.error(err);
return err;
});
},
getPositionByIdPool: (id) => {
connPool.Request().query(`----second query-----`)
.then((set) => {
console.log(set);
return set;
}).catch((err) => {
console.error(err);
return err;
});
我应该如何调用这些将第二个查询的结果作为附加属性添加到第一个查询的结果中?回调令人困惑。
答案 0 :(得分:0)
看起来两个查询都在同一服务器上执行,您是否考虑过使用子查询? (https://docs.microsoft.com/en-us/sql/relational-databases/performance/subqueries?view=sql-server-2017)。如果您可以表达要在SQL中执行的操作,则与手动合并记录集相比,使用子查询执行此操作可能会更快1)更清洁2)更快。如果它们存在于不同的服务器上,则可以使用链接服务器获得相同的子查询结果。