在我的数据库中,我有两张桌子。我们称他们为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);
}
});
我们假设表1
中的ID 2
和A
在表B
中有与它们相关的记录。其余的不是。我想从表B
获取带有这些外键的记录,但我只收到一个空数组。仅当我只使用一个匹配值键入查询时,它才有效。但对于整个价值观,其中一些没有相关记录。
如何修复并获取有关这些记录的信息?
答案 0 :(得分:1)
您必须使用=
而不是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);
}
});