Node.js的mysql执行多表联合查询

原创 2015年11月20日 11:00:44

数据库(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'}]

版权声明:

相关文章推荐

Mysql之node.js执行多条sql语句

最近做Qt项目,用node.js写后台,在初始化数据库表的时候,不想手动操作创建表,直接用代码来操作,由于表的数量比较多,又想一次性直接执行多条语句,具体的操作步骤如下:

nodejs mysql 执行多条sql语句

执行多条查询语句 为了安全起见,默认情况下是不允许执行多条查询语句的。要使用多条查询语句的功能,就需要在创建数据库连接的时候打开这一功能:   var connection = mys...
  • DlMmU
  • DlMmU
  • 2017-04-20 15:00
  • 1268

MySQL分库分表总结参考

单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。  单库多表  随着用户数量的增加,user表的...

nodejs+mongoose简单关联+增删改查

本篇文章是关于mongoose的简单操作,包括使用objectId来关联和一些增删查改的方法。希望能指出不正确的地方,因为我也是初学者。也希望能对其他初学者有帮助!谢谢! node.js目录结构:...

Nodejs中“循环+异步” 好深的坑!!

这几天在搞Nodejs从数据库中获取数据进行格式转换,折腾了好几个日日夜夜,各种循环+异步操作,最后发现这玩意好恶心,怎么每次运行结果都会变,有时报错哪个值undefined有时正常,简直吐血,经历无...

Node.js的mysql数据库操作

连接mysql数据库 var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localho...

mysql多表联合查询

  • 2013-11-04 22:36
  • 54KB
  • 下载

Mysql多表联合查询

  • 2015-11-11 15:29
  • 182B
  • 下载

MySQL的多表联合查询

一.多表查询简介: 连接查询: 交叉连接: 交叉连接:查询到的是两个表的笛卡尔积 语法: selec...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)