【问题标题】:Get all data from different tables in a SQLite database in Node.js从 Node.js 中的 SQLite 数据库中的不同表中获取所有数据
【发布时间】:2020-11-02 09:05:31
【问题描述】:

这是一种从数据库中获取所有数据的方法吗?

到目前为止,我已经完成了从一个表中获取所有数据:

router.get('/', function (req, res, next) {
  db.serialize(function () {
    db.all('SELECT id, name, surname FROM Table1', function (
      err,
      rows
    ) {
      return res.send(rows);
    });
  });

  db.close();
});

但如果有更多表,例如Table1Table2Table3

尝试将所有查询放在 db.all 调用中似乎不起作用。

 router.get('/', function (req, res, next) {
      db.serialize(function () {
        db.all('SELECT id, name, surname FROM Table1, SELECT date, city FROM Table2, SELECT person, year FROM Table3', function (
          err,
          rows
        ) {
          return res.send(rows);
        });
      });
    
      db.close();
    });

更新

这些是表格,我怎样才能获取它们的所有数据并将其发送到前端?这就是我想做的。

我宁愿让它们像前端中的单独表格一样获取调用,如下所示:

callAPI() {
    fetch('http://localhost:9000/testAPI')
      .then((res) => res.text())
      .then((res) => this.setState({ apiResponse: res }));
  }

有没有办法发送所有这些表格?

【问题讨论】:

  • 因此您可以嵌套多个 db.all 调用,将下一个调用放在前一个的回调 function(){} 部分中。如果您的代码一直向右缩进,那么您的操作是正确的。仅在最后一个调用 res.send ......这只有在您只有几张表并且提前知道查询方式时才有帮助。如果您想向数据库询问表列表,然后对其进行操作,它会变得更加复杂。具体来说,您需要一种异步迭代的方法。您可以这样做并避免使用节点的 async 库或 Promise.all 如果您的框架理解 Promise 来嵌套回调。
  • 我正在使用 Node.js,所以我猜 Promise.all 工作正常。我用表格更新了问题,我不明白为什么它不起作用。发送一张表可以正常发送,但发送它们都不起作用

标签: javascript sql node.js sqlite


【解决方案1】:

如果您的所有表都具有相同的列,或者至少可以将输出别名为相同的列名(如果列不在其中一个表中,则可以使用空值),您可以使用UNION

例如:

SELECT id, name FROM table1 
 UNION 
   SELECT id, name FROM table2
 UNION 
   SELECT myid as id, test as name FROM table3

通过这种方式,您可以将所有此类表附加到单个输出表中。此外,如果您希望它通过代码进行聚合,您可以使用以下查询来获取所有表名并使用每个表:

SELECT name FROM my_db.sqlite_master WHERE type='table';

【讨论】:

  • 刚刚更新了问题,表格没有相同的列名。我试过 UNIONUNION ALL 但它没有返回任何数据
  • 你必须为你的列输出使用别名,使用AS来确保每个表的列名都是一些
  • 如果表格完全不同,我建议采用第二种方法。顺便说一句,你的第 700 个进球太棒了! :)
  • 查看我的示例查询的 table3
  • 所以我这样做了:` 'SELECT name FROM ocs_athletes.sqlite_master WHERE type="table"',` 我的数据库名称是ocs_athletes。这是错的吗?因为它仍然没有显示任何内容
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
相关资源
最近更新 更多