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'}]

nodejs mysql 数据查询例子

1、安装nodejs2、安装mysql npm包地址:https://github.com/felixge/node-mysqlnpm install mysql 3、相应API查看及调用:var...
  • z040145
  • z040145
  • 2015年12月31日 09:36
  • 1621

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

数据库(test)中的表结构(admin、user) //执行多表结合查询 var mysql = require('mysql'); var connection = mysql....
  • kongjunchao159
  • kongjunchao159
  • 2015年11月20日 11:00
  • 1956

mysql两表联合查询,一对多

t_user表如下 cj表如下: 要获得的查询结果: 解决办法: select cjc.uid,u.uname,cjc.数学,cjc.英语,cjc.语文,u.type from   (s...
  • superit401
  • superit401
  • 2017年03月09日 09:50
  • 4414

MYSQL基础_聚合函数_分组和多表连接查询

作用:去掉结果集中的重复记录 说明: 出现在查询语句字段列表中 当结果集中所有字段的值相同,才是重复记录 as 作用:给表或字段起别名 例子: select age,name,brief...
  • youyou_yo
  • youyou_yo
  • 2015年09月23日 11:53
  • 3949

mysql多表联合查询

  • 2013年11月04日 22:36
  • 55KB
  • 下载

Mysql多表联合查询

  • 2015年11月11日 15:29
  • 182B
  • 下载

mysql数据库的多表设计和各种查询(连接查询\子查询\联合查询\报表查询),以及数据库备份和恢复

  • 2013年08月01日 18:02
  • 4KB
  • 下载

MySQL的多表联合查询

一.多表查询简介: 连接查询: 交叉连接: 交叉连接:查询到的是两个表的笛卡尔积 语法: selec...
  • a312318619
  • a312318619
  • 2017年06月26日 23:43
  • 205

Mysql 多表联合查询效率分析及优化

1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:  [sql] view plain...
  • u012527802
  • u012527802
  • 2016年04月05日 11:30
  • 569

Mysql 多表联合查询效率分析及优化

原文地址:http://blog.csdn.net/hguisu/article/details/5731880 1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS...
  • yxwb1253587469
  • yxwb1253587469
  • 2015年12月12日 16:59
  • 221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Node.js的mysql执行多表联合查询
举报原因:
原因补充:

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