首页 > 解决方案 > 避免在结果中获取 id 数组(mssql - node.js)

问题描述

我最近开始使用 mssql (SQLServer) 而不是 MySQL。所以我更新了我的路线以使用 mssql。

但是我遇到了一个问题:例如,当我使用连接时,有 2 个具有“Id”列的表,我得到了一个 Id 数组而不是单个 Id。(两个id都一样)

是否有可能只获得一个 id 而不是一个数组?先感谢您 !

  const query = 'SELECT sessions.*, chiffres.*, participants.*\
  FROM dbo.sessions\
  INNER JOIN dbo.participants ON participants.id = sessions.id\
  INNER JOIN dbo.chiffres ON chiffres.id = participants.id'

  return ps.prepare(query, err => {
    if (err) {
      return res.json({ errors: { sql: err } })
    }
    return ps.execute(optsValues, (err, results) => {
      if (err) {
        return res.json({ errors: { sql: err } })
      }
      return ps.unprepare(err => {
        if (err) {
          return res.json({ errors: { sql: err } })
        }

        return res.json({ sessions: results?.recordset })
      })
    })
  })

结果.记录集 =>

[
    {
        "id": [2, 2, 2],
        "num_session": "blabla"
        ...
    }
]

标签: javascriptsqlnode.jssql-server

解决方案


我对javascript不太熟悉,但是由于每个表中的COLUMN名称完全相同,并且您没有为列起别名,那么您希望客户端如何将它们分开?

在您的查询中使用 table.* 通常是不好的做法,因为表结构可能会随着时间而改变,并且您的代码不会立即出错并且可能会对下游产生不利影响。始终具体说明您要选择的列。

尝试这样的查询:

const query = 'SELECT sessions.id as SessionID, sessions.num_session, chiffres.id as ChiffresID, chiffres.ca, participants.id as ParticipantID, participants.name\
FROM dbo.sessions\
INNER JOIN dbo.participants ON participants.id = sessions.id\
INNER JOIN dbo.chiffres ON chiffres.id = participants.id'

推荐阅读