數據庫(test)中的表結構(admin、user)
//執行多表結合查詢 var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', port : 3306, database : 'test', user : 'root', password : '' }) connection.connect(function(err){ if(err){ console.log('與mysql數據庫建立連接失敗'); }else{ console.log('與mysql數據庫建立連接成功'); connection.query('select admin.id,admin.username,admin.password,user.id,user.username from admin inner join user on admin.username = user.username',function(err,result){ if(err){ console.log('查詢數據失敗'); }else{ console.log('查詢數據成功'); console.log(result); connection.end(); } }) } }) //[{id:2,username:'kong',password:'123'}] //注意:聯合查詢時,select + ...字段,如果字段名相同(雖然表名不同)會使后一個字段覆蓋前一個字段,產生我們不想要的結果 //以上例子admin表和user表的id、username字段由於名字相同,導致前面的被覆蓋,最后查詢出來的結果是user.id、user.username、admin.password //使用*也會導致覆蓋問題 //解決辦法 //方案一(對重復的字段使用別名) var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', port : 3306, database : 'test', user : 'root', password : '' }) connection.connect(function(err){ if(err){ console.log('與mysql數據庫建立連接失敗'); }else{ console.log('與mysql數據庫建立連接成功'); connection.query('select admin.id,admin.username,admin.password,user.id id1,user.username username1 from admin inner join user on admin.username = user.username',function(err,result){ if(err){ console.log('查詢數據失敗'); }else{ console.log('查詢數據成功'); console.log(result); connection.end(); } }) } }) //注意,select + ...字段使用了別名id1和username1 //[{id:1,username:'kong',password:'123',id1:2,username1:'kong'}] //方案二(使用nestTables屬性並將屬性值設定為true) var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', port : 3306, database : 'test', user : 'root', password : '' }) connection.connect(function(err){ if(err){ console.log('與mysql數據庫建立連接失敗'); }else{ console.log('與mysql數據庫建立連接成功'); connection.query({sql:'select admin.id,admin.username,admin.password,user.id,user.username from admin inner join user on admin.username = user.username',nestTables:true},function(err,result){ if(err){ console.log('查詢數據失敗'); }else{ console.log('查詢數據成功'); console.log(result); connection.end(); } }) } }) //注意和方案一查詢的數據格式不一樣 //[{admin:{id:1,username:'kong',password:'123'},user:{id:2,username:'kong'}}] //方案三(使用nestTables屬性並將屬性值設定為一個分隔字符) var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', port : 3306, database : 'test', user : 'root', password : '' }) connection.connect(function(err){ if(err){ console.log('與mysql數據庫建立連接失敗'); }else{ console.log('與mysql數據庫建立連接成功'); connection.query({sql:'select admin.id,admin.username,admin.password,user.id,user.username from admin inner join user on admin.username = user.username',nestTables:'_'},function(err,result){ if(err){ console.log('查詢數據失敗'); }else{ console.log('查詢數據成功'); console.log(result); connection.end(); } }) } }) //[{admin_id:1,admin_username:'kong',admin_password:'123',user_id:2,user_username:'kong'}]