Mysql的存储过程:查找一张表的数据再根据查出来的数据去另外一张表中取另外的数据

时间:2021-10-11 09:25:06
表结构如下

/*Table structure for table `tbl_mail` */

DROP TABLE IF EXISTS `tbl_mail`;

CREATE TABLE `tbl_mail` (
  `MailID` INT(64) NOT NULL COMMENT '邮件ID',
  `UserID` INT(64) NOT NULL COMMENT '用户ID',
  `ActorID` INT(32) NOT NULL COMMENT '角色ID',
  `MailItemID` INT(32) COMMENT '邮件模板ID',
  `MailType` TINYINT(1) NOT NULL COMMENT '邮件类型',
  `MailTitle` VARCHAR(64) NOT NULL COMMENT '邮件标题',
  `MailBody` VARCHAR(512) NOT NULL COMMENT '邮件内容',
  `SendActorID` INT(32) COMMENT '发送玩家ID',
  `SendActorName` VARCHAR(32) COMMENT '发送玩家名字',
  `SendTime` DATETIME NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`MailID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


/*Table structure for table `tbl_mailgoods` */

DROP TABLE IF EXISTS `tbl_mailgoods`;

CREATE TABLE `tbl_mailgoods` (
  `MailID` INT(64) NOT NULL COMMENT '邮件ID',
  `UserID` INT(64) NOT NULL COMMENT '用户ID',
  `ActorID` INT(32) NOT NULL COMMENT '角色ID',
  `GoodsID` INT(32) NOT NULL COMMENT '物品ID',
  `GoodsType` TINYINT(1) NOT NULL COMMENT '物品类型',
  `Num` INT(32) NOT NULL COMMENT '物品数量',
  PRIMARY KEY (`MailID`, `GoodsID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


现在是想从根据外包传进来的UserID和ActorID查找tbl_mail表中的数据,再根据查找出来的数据去tbl_mailgoods中的数据。
从tbl_mail表中能查到多条数据,然后每条数据又有可能在tbl_mailgoods中有多条,怎么写存储过程。
希望输出的集合为:
MailID,MailItemID,MailType,MailTitle,MailBody,SendActorID,SendActorName,SendTime(GoodsID,GoodsType,Num……)

7 个解决方案

#1


先搞清楚这两张表的关联关系是什么

#2


引用 1 楼 jielovehuan 的回复:
先搞清楚这两张表的关联关系是什么

tbl_mailgoods是tbl_mail的子表啊,我们数据库基本没用外键这个东东,加上的话可以实现么?

#3


就是表的联合查询吧

不需要存储过程吧

#4


“再根据查找出来的数据去tbl_mailgoods中的数据”  这个逻辑是什么,根据什么条件什么字段匹配去查询?

#5


SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID` 
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;

内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。

#6


引用 5 楼 mchdba 的回复:
SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID` 
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;

内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。

OK,3Q,是我想要的

#7


引用 6 楼 newhvi 的回复:
Quote: 引用 5 楼 mchdba 的回复:

SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID` 
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;

内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。

OK,3Q,是我想要的


不客气,能帮到你就好。

#1


先搞清楚这两张表的关联关系是什么

#2


引用 1 楼 jielovehuan 的回复:
先搞清楚这两张表的关联关系是什么

tbl_mailgoods是tbl_mail的子表啊,我们数据库基本没用外键这个东东,加上的话可以实现么?

#3


就是表的联合查询吧

不需要存储过程吧

#4


“再根据查找出来的数据去tbl_mailgoods中的数据”  这个逻辑是什么,根据什么条件什么字段匹配去查询?

#5


SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID` 
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;

内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。

#6


引用 5 楼 mchdba 的回复:
SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID` 
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;

内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。

OK,3Q,是我想要的

#7


引用 6 楼 newhvi 的回复:
Quote: 引用 5 楼 mchdba 的回复:

SELECT t2.*,t1.*
FROM tbl_mail t2 , tbl_mailgoods t1
WHERE t2.`UserID`= 123 AND t2.`ActorID` 
AND t1.`UserID`=t2.`UserID` AND t1.`ActorID`=t2.`ActorID` AND t1.`MailID`=t2.`MailID`;

内连接中,多对多都会自动查询出来的,比如2VS3,那么查询出来就是6条记录。

OK,3Q,是我想要的


不客气,能帮到你就好。