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中一次查询结果用作二次查询条件相关推荐

  1. mysql五大子句_MySQL的查询语句中可以使用以下哪个子句来表示分组查询

    [多选题]人类行为遗传学工作者倾向于把人的行为遗传分为哪几类 [填空题]MySQL的连接操作包括内连接.( )和交叉连接. [判断题]社会生活类尤其是人文风光类纪录片的解说则多用文学. 散文手法, 既 ...

  2. php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)

    mysql中时间查询函数(包括时间戳) 这些函数都是MySQL自带的,可以直接使用在PHP写的MySQL查询语句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURR ...

  3. mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计[实训目的与要求][实训原理][实训步骤]一.简单查询二.按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWE ...

  4. mysql子查询教行子查询_MySQL中列子查询与行子查询操作的学习教程

    MysqL 列子查询及 IN.ANY.SOME 和 ALL 操作符的使用MysqL 列子查询 列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如 ...

  5. mysql无关子查询_mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决...

    ※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样) SHOW VARIABLES; //查看系统变量 //查询字符编码相关的系统变量 SHOW VARIABLES WHERE ...

  6. mysql排序显示行数的语句_MySQL中sql语句count(*),orderby,随机数据展示。

    count(*)这么慢,我该怎么办? MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高: 而 InnoDB 引擎就麻烦了,它执行 count ...

  7. mysql添加二级索引的sql语句_MySQL面试知识点追命连环问(二)事务、索引及SQL优化...

    目录 ​上次我们讨论了MySQL的运行流程及原理,字段设计,存储引擎和查询缓存. 这次我们继续来追命连环问关于事务,索引,SQL优化等相关的内容.准备好了吗?事务 索引 SQL优化 常见问题 1. M ...

  8. mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  9. mysql改了排序规则不生效_Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  10. mysql时间模糊查询_mysql中那些根据时间查询的sql语句

    在我们使用mysql是免不了要根据时间去查询一些数据,这个时候一般有几种方式可以去查询. 第一种数据库,如果有数据新建时间可以以这个时间为节点,通过当前时间条件去比较时间来查询到此段时间内的数据 例如 ...

最新文章

  1. centos 查看mysql 服务器配置_在CentOS上MySQL数据库服务器配置方法
  2. 海通证券签约神策数据 数据赋能构建数字化运营闭环
  3. VTK:绘图之ParallelCoordinates
  4. Lua源码分析 - 基础篇 - Lua源码的结构和架构图(01)
  5. C# Lambda 和 匿名函数的GC总结
  6. 如何定义一个 Listint,string 这样的 List ?
  7. vps搭建网站服务器,vps如何架设网站服务器
  8. 公众号里面套页面_微信公众号页面模板有什么用?开通的方法是什么?
  9. spirng整合rmi
  10. haproxy + keepalived 使用 kubeadm 部署高可用Kubernetes 集群
  11. 为什么大厂全在搞全链路压测?
  12. java:利用数组实现将古诗词纵向输出
  13. chrome打开链接隐私设置错误_解决用谷歌浏览器访问https网站遇到的“隐私设置错误 您的连接不是私密连接”问题...
  14. Verilog 边沿检测电路
  15. js阻止冒泡事件发生(react)
  16. Modelsim软件仿真出错:Modelsim is exiting with code 7.
  17. 腾讯徐春明:互联网金融行业HBase实践与创新
  18. Prometheus 告警收敛
  19. var和let和const_用故事讲解JavaScript的var,let和const变量
  20. tkinter改变下拉列表(Combobox)的选项值

热门文章

  1. 在framework下新建系统api
  2. 苹果强制使用HTTPS传输后APP开发者必须知道的事
  3. 制作html语言网站全攻略,(网页制作HTML代码全攻略.doc
  4. 如何选择一台适合个人使用的云服务器?
  5. 关于idea中提交svn时一直显示performing VCS refresh
  6. pmap anon 内存泄露
  7. 谷歌ai人工智能叫什么_用Google新的AI强大工具翻译古代象形文字
  8. html mui模板使用,mui + vue 模板
  9. win7 eclipse调用虚拟机ubuntu部署的hadoop2.2.0伪分布(1)
  10. 计算机一级死都过不了怎么办,电脑假死,详细教您电脑假死机怎么处理