2017-07-19 103 views
0

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

我从A表中获取几个ID,我想在B表中找到与外键匹配的记录。然而,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); 
    } 
}); 

比方说,IDS号1,并从表A2已记录与之相关的表B。其余的不是。我想用这些外键从表B获得记录,但我只收到一个空数组。它仅适用于仅使用一个匹配值键入查询。但是,对于其中一些没有相关记录的整个值。

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

+0

对于每个A,B中是否总是只有一个条目,或者对于每个A,B中是否会有多个条目? –

+0

B中只有一条记录与A中的一条记录相关是可能的 – andrzej541

回答

1

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

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

你写的只有第一个ID阵列idsFromA的方式将被用于?

而不是使用两个查询,你可能想要使用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); 
    } 
}); 
+0

这两种方式都有效。谢谢你的帮助 – andrzej541