在我的数据库中有两个表。我们将它们称为 A
和 B
。 B
表具有与 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 号 1
和 2
在表 B
中有与它们相关的记录。其余的人则不然。我想使用这些外键从表 B 中获取记录,但我只收到一个空数组。仅当我键入仅包含一个匹配值的查询时,它才有效。但对于整个值数组,其中一些值没有相关记录。
我该如何修复它并获取有关这些记录的信息?
最佳答案
您必须使用 IN
而不是 =
,并且需要将数组作为第一个占位符的值传递。
connection.query("SELECT * FROM B_table WHERE a_id IN (?)", [idsFromA], ...)
您编写的方式仅将数组 idsFromA
中的第一个 id 用于 ?
。
您可能希望使用LEFT JOIN
和nestTables
选项,而不是使用两个查询。
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/