mysql - NodeJS mysql 获取相关数据

标签 mysql node.js

在我的数据库中有两个表。我们将它们称为 ABB 表具有与 A 表中的记录 ID 相关的外键。

我从 A 表中获取几个 id,并且想在 B 表中查找外键与这些 id 匹配的记录。然而,并非 A 表中的每条记录在 B 表中都有与其相关的记录。

所以在我的代码中它看起来像这样:

var idsFromA = [1, 2, 3, 4, 5]

connection.query("SELECT * FROM B_table WHERE a_id = ?", idsFromA, function(err, results) {
  if (err) {
    return console.log(err)
  } else {
    // always empty
    console.log(results);
  }
});

假设表 A 中的 ID 号 12 在表 B 中有与它们相关的记录。其余的人则不然。我想使用这些外键从表 B 中获取记录,但我只收到一个空数组。仅当我键入仅包含一个匹配值的查询时,它才有效。但对于整个值数组,其中一些值没有相关记录。

我该如何修复它并获取有关这些记录的信息?

最佳答案

您必须使用 IN 而不是 =,并且需要将数组作为第一个占位符的值传递。

connection.query("SELECT * FROM B_table WHERE a_id IN (?)", [idsFromA], ...)

您编写的方式仅将数组 idsFromA 中的第一个 id 用于 ?

您可能希望使用LEFT JOINnestTables 选项,而不是使用两个查询。

connection.query({
  query: 'SELECT * FROM A_table LEFT JOIN B_table ON (A_table.id=B_table.a_id) WHERE ...some condition to filter A...',
  nestTables: true
}, function(err, results) {
  if (err) {
    console.log(err)
  } else {
    console.dir(results);
  }
});

关于mysql - NodeJS mysql 获取相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45183314/

相关文章:

PHP/MYSQL 填充按查询结果排序的下拉列表

mysql选择更新: not locked for read

node.js - 在流模式下使用 needle.js 时如何获取响应 header ?

javascript - emberJS 挤压 nwJS require() 方法

mysql - SQL LIKE 语句不起作用

mysql - 如何在mysql中索引innodb文本?

node.js - ".on"中的 "process.stdin.on"是做什么用的?

node.js - http请求的for循环延迟

sql - 虚拟文件系统在数据库中使用什么结构?

node.js - Node.js 中 ForEach 内的异步请求