mysql结果作为另一次查询_MySql中一次查询结果用作二次查询条件
Sql的截取关联查询
最近在写sql时,碰到了如下情况,
需求是通过一个账户的id去查询关联的该账户下的所有简历,其中地址字段要通过另一个表进行关联查询。地址字段存的是地址表中对应的编号。
例如210000,210100,210106 代表辽宁省沈阳市铁西区。
通过截取地址字段,分出3个字符串然后进行分别关联查询
语句如下:
插的图片,插代码块的格式我也有点迷
当数据库中该用户下只有一份简历的时候,这条语句是成立的,但如果有多条就会报错
[Err] 1242 - Subquery returns more than 1 row
子查询超过一行以上
原因在于查询条件,当有多份简历时,查询的简历id不唯一
WHERE prt.user_info_id=(
SELECT pit._id
FROM person_info_t pit
WHERE pit.user_id=@pti_user_id)
)
临时表数据中转 调用过程循环查询
创建一张表作为储存简历的id
drop table if exists tmp_table;
create table tmp_table ( -- 创建一张表作为本次储存数据的中转站 也可以用临时表来代替
id INT UNSIGNED NOT NULL auto_increment, -- id自增
prt_id varchar(64), -- 储存简历id
PRIMARY KEY (id)
);
UNSIGNED 表示无符号
MYSQL中整型范围
类型
大小
范围(有符号)
范围(无符号)
用途
TINYINT
1 字节
(-128,127)
(0,255)
小整数值
SMALLINT
2 字节
(-32 768,32 767)
(0,65 535)
大整数值
MEDIUMINT
3 字节
(-8 388 608,8 388 607)
(0,16 777 215)
大整数值
INT或INTEGER
4 字节
(-8 388 608,8 388 607)
(0,4 294 967 295)
大整数值
从临时表中查找并将简历的id插入到表中,count结果用作循环次数限制
INSERT INTO tmp_table(prt_id)
SELECT prt. _id FROM person_resume_t prt ,person_info_t pit
WHERE prt.user_info_id = pit._id
AND pit.user_id = "98444836924a4c67845da048a77e29d6";
SET @j=0;
SELECT COUNT(*) INTO @j FROM tmp_table;
创建查询过程,在这说下,sql循环是个坑,卡了我好长时间
- mysql 循环在存储过程中才受支持,存储过程外不能用
- mysql 循环在存储过程中才受支持,存储过程外不能用
- mysql 循环在存储过程中才受支持,存储过程外不能用
CREATE PROCEDURE selectPrtInfoByPrtId(IN j int)
BEGIN
DECLARE i INT;
SET i=1;
WHILE i1 do
SELECT
prt._id,prt.production_pic_url,prt.video_url,prt.user_info_id,
prt.skill_tag,prt.sex,prt.phone_number,prt.head_pic_url,
prt.introduction,prt.`name`,prt.modify_time,prt.email,
prt.create_time,prt.birth,prt.address,prt.resume_name,
(select re.REGION_NAME
from region re
inner join person_resume_t prt
on re.REGION_CODE = SUBSTRING_INDEX(prt.address,',',1)
WHERE prt._id=( -- 此处拿到简历id
SELECT tt.prt_id
FROM tmp_table tt
WHERE tt.id = i)
)
as province,
(select re.REGION_CODE
from region re
inner join person_resume_t prt
on re.REGION_CODE = SUBSTRING_INDEX(prt.address,',',1)
WHERE prt._id=(
SELECT tt.prt_id
FROM tmp_table tt
WHERE tt.id = i)
)
as province_id,
(select re.REGION_NAME
from region re
inner join person_resume_t prt
on re.REGION_CODE = SUBSTRING_INDEX(SUBSTRING_INDEX(prt.address,',',2),',',-1)
WHERE prt._id=(
SELECT tt.prt_id
FROM tmp_table tt
WHERE tt.id = i)
)
as city,
(select re.REGION_CODE
from region re
inner join person_resume_t prt
on re.REGION_CODE = SUBSTRING_INDEX(SUBSTRING_INDEX(prt.address,',',2),',',-1)
WHERE prt._id=(
SELECT tt.prt_id
FROM tmp_table tt
WHERE tt.id = i)
)
as city_id,
(select re.REGION_NAME
from region re
inner join person_resume_t prt
on re.REGION_CODE = SUBSTRING_INDEX(prt.address,',',-1)
WHERE prt._id=(
SELECT tt.prt_id
FROM tmp_table tt
WHERE tt.id = i)
)
as district,
(select re.REGION_CODE
from region re
inner join person_resume_t prt
on re.REGION_CODE = SUBSTRING_INDEX(prt.address,',',-1)
WHERE prt._id=(
SELECT tt.prt_id
FROM tmp_table tt
WHERE tt.id = i)
)
as district_id
FROM person_resume_t prt
WHERE prt._id=(SELECT tt.prt_id FROM tmp_table tt WHERE tt.id = i)
ORDER BY prt.create_time;
SET i = i + 1;
END WHILE;
END
声明变量i,用作索引来查找临时表中的id,j为传入的限制循环次数,每次查询后返回查询结果,也可以在弄一个表来接收
执行一下
drop table if exists tmp_table;
create table tmp_table (
id INT UNSIGNED NOT NULL auto_increment,
prt_id varchar(64),
PRIMARY KEY (id)
);
INSERT INTO tmp_table(prt_id)
SELECT prt. _id FROM person_resume_t prt ,person_info_t pit
WHERE prt.user_info_id = pit._id
AND pit.user_id = "98444836924a4c67845da048a77e29d6";
SELECT COUNT(*) INTO @j FROM tmp_table;
SELECT @j;
CALL selectPrtInfoByPrtId(@j);
返回结果如下
返回三条结果,总结一下:
- sql的循环离不开储存过程的支持,单独拿出来写并不好用
- 变量的作用域问题,尝试时全局变量的值很容易出现问题
- mysql中也没有控制台的概念,整个就是控制台,可以通过select的方式来查看值
mysql结果作为另一次查询_MySql中一次查询结果用作二次查询条件相关推荐
- mysql五大子句_MySQL的查询语句中可以使用以下哪个子句来表示分组查询
[多选题]人类行为遗传学工作者倾向于把人的行为遗传分为哪几类 [填空题]MySQL的连接操作包括内连接.( )和交叉连接. [判断题]社会生活类尤其是人文风光类纪录片的解说则多用文学. 散文手法, 既 ...
- php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)
mysql中时间查询函数(包括时间戳) 这些函数都是MySQL自带的,可以直接使用在PHP写的MySQL查询语句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURR ...
- mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计
任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计[实训目的与要求][实训原理][实训步骤]一.简单查询二.按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWE ...
- mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程
MysqL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MysqL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如 ...
- mysql无关子查询_mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决...
※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样) SHOW VARIABLES; //查看系统变量 //查询字符编码相关的系统变量 SHOW VARIABLES WHERE ...
- mysql排序显示行数的语句_MySQL中sql语句count(*),orderby,随机数据展示。
count(*)这么慢,我该怎么办? MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高: 而 InnoDB 引擎就麻烦了,它执行 count ...
- mysql添加二级索引的sql语句_MySQL面试知识点追命连环问(二)事务、索引及SQL优化...
目录 上次我们讨论了MySQL的运行流程及原理,字段设计,存储引擎和查询缓存. 这次我们继续来追命连环问关于事务,索引,SQL优化等相关的内容.准备好了吗?事务 索引 SQL优化 常见问题 1. M ...
- mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- mysql改了排序规则不生效_Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题...
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- mysql时间模糊查询_mysql中那些根据时间查询的sql语句
在我们使用mysql是免不了要根据时间去查询一些数据,这个时候一般有几种方式可以去查询. 第一种数据库,如果有数据新建时间可以以这个时间为节点,通过当前时间条件去比较时间来查询到此段时间内的数据 例如 ...
最新文章
- centos 查看mysql 服务器配置_在CentOS上MySQL数据库服务器配置方法
- 海通证券签约神策数据 数据赋能构建数字化运营闭环
- VTK:绘图之ParallelCoordinates
- Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)
- C# Lambda 和 匿名函数的GC总结
- 如何定义一个 Listint,string 这样的 List ?
- vps搭建网站服务器,vps如何架设网站服务器
- 公众号里面套页面_微信公众号页面模板有什么用?开通的方法是什么?
- spirng整合rmi
- haproxy + keepalived 使用 kubeadm 部署高可用Kubernetes 集群
- 为什么大厂全在搞全链路压测?
- java:利用数组实现将古诗词纵向输出
- chrome打开链接隐私设置错误_解决用谷歌浏览器访问https网站遇到的“隐私设置错误 您的连接不是私密连接”问题...
- Verilog 边沿检测电路
- js阻止冒泡事件发生(react)
- Modelsim软件仿真出错:Modelsim is exiting with code 7.
- 腾讯徐春明:互联网金融行业HBase实践与创新
- Prometheus 告警收敛
- var和let和const_用故事讲解JavaScript的var,let和const变量
- tkinter改变下拉列表(Combobox)的选项值
热门文章
- 在framework下新建系统api
- 苹果强制使用HTTPS传输后APP开发者必须知道的事
- 制作html语言网站全攻略,(网页制作HTML代码全攻略.doc
- 如何选择一台适合个人使用的云服务器?
- 关于idea中提交svn时一直显示performing VCS refresh
- pmap anon 内存泄露
- 谷歌ai人工智能叫什么_用Google新的AI强大工具翻译古代象形文字
- html mui模板使用,mui + vue 模板
- win7 eclipse调用虚拟机ubuntu部署的hadoop2.2.0伪分布(1)
- 计算机一级死都过不了怎么办,电脑假死,详细教您电脑假死机怎么处理