2017-07-19 2 views
0

私のデータベースには2つのテーブルがあります。 ABとしましょう。 Bテーブルには、AテーブルのレコードのIDに関連する外部キーがあります。NodeJS mysqlフェッチ関連データ

Aテーブルから2つのIDを取得し、それらの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とテーブルAから2は、レコードテーブルBでそれらに関連しているとしましょう。残りの部分はありません。テーブルBからこれらの外部キーを使用してレコードを取得したいが、空の配列しか受け取らない。これは、一致する値が1つしかないクエリを入力した場合にのみ機能します。しかし、それらのいくつかは関連するレコードを持っていない値の全体の配列のために。

私はそれを修正し、それらのレコードに関する情報を入手するにはどうすればよいですか?

+0

各AのBには1つのエントリしか存在しないか、各AのBに1つ以上のエントリが存在する可能性がありますか? –

+0

Aの1レコードに関連するBのレコードは1つだけ可能です。 – andrzej541

答えて

1

=の代わりにINを使用する必要があり、最初のプレースホルダの値として配列を渡す必要があります。

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

あなたは、配列idsFromAにのみ最初のidそれを書いた方法は?ために使用されるであろう。

2つのクエリを使用する代わりに、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

関連する問題