SQL里3个表的连接查询的语句怎么写

1、SQL语句:

select u.*,r.*,r.id rid

from user u left join sys_user_role sur on u.id = sur.userid

left join sys_role r on sur.roleid = r.id

图片:

    请点击输入图片描

请点击输入图片描述

    注1:user(用户表),sys_role(角色表),sys_user_role(关系表)。

表1:user(下图)

    请点击输入图片描述 表2:sys_role(下图) 请点击输入图片描述 表3:sys_user_role(下图) 请点击输入图片描述

请点击输入图片描述


算了,建表语句也给你们了,你们自己测试,这样更详细,(程序员)多动手,比什么都好。(下面代码区)

-- ----------------------------
-- Table structure for user(用户表)
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) DEFAULT NULL,
  `password` VARCHAR(50) DEFAULT NULL,
  `birthday` VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

SELECT * FROM USER;

INSERT INTO `user` VALUES (1, lucy, 123, 2019-12-12);
INSERT INTO `user` VALUES (2, tom,123, 2019-12-12);


-- ----------------------------
-- Table structure for sys_role(角色表)
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `rolename` VARCHAR(255) DEFAULT NULL,
  `roleDesc` VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

SELECT * FROM sys_role;

-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES (1, CTO, CTO);
INSERT INTO `sys_role` VALUES (2, CEO, CEO);


-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
  `userid` INT(11) NOT NULL,
  `roleid` INT(11) NOT NULL,
  PRIMARY KEY (`userid`,`roleid`),
  KEY `roleid` (`roleid`),
  CONSTRAINT `sys_user_role_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `sys_role` (`id`),
  CONSTRAINT `sys_user_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `user` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

SELECT * FROM sys_user_role;

-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES (1, 1);
INSERT INTO `sys_user_role` VALUES (2, 1);
INSERT INTO `sys_user_role` VALUES (1, 2);
INSERT INTO `sys_user_role` VALUES (2, 2);

2、SQL语句解释:

select a.*,b.*

from a表 a left join b表 b on a.id = b.aid

left join c表 c on b.cid = c.id

注2:此语句适合a表与c表连接,b表是关系表的情况。

经验分享 程序员 微信小程序 职场和发展