2017-07-19 42 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