mysql查询结果实现多列拼接查询


Posted in MySQL onApril 03, 2022

之前遇到过一个问题,mysql数据库中有两个表,一张地址表存放省市区等位置信息,另一张用户表里存在三个字段分别对应地址表中的三个位置信息(很奇怪的表格式),如图:

mysql查询结果实现多列拼接查询

mysql查询结果实现多列拼接查询

现在需要查询user表中的数据,并根据user表中省市区的值,在地址表中查询到对应的位置信息(name)并显示出来;

本人对sql并不精通,所以捋了一个大致逻辑

首先要得到user表的省市区三个字段的值,我们一般的查询方式是

SELECT province,city,district FROM `user` WHERE id =1;

这个比较简单,得到的结果为一行三列的值,如图:

mysql查询结果实现多列拼接查询

这是正常的写法,之后使用这个结果为查询条件,去查询地址表中的name即可.

当然想法似乎不错,但这个查询出来的结果是分为三段的,并不利于我们后面的查询,总不能取出结果后再进行处理再查询吧,这样太麻烦了,这时候要用到sql的两个函数,CONCAT_WS和CONCAT,两个函数的作用是将结果拼接为一个字符串,具体的用法可以自行百度.这里就不多做介绍了:)

所以我们的查询语句就可以写成SELECT CONCAT_WS(',',province,city,district) AS ids FROM `user` WHERE id =1;得到的结果如图:

mysql查询结果实现多列拼接查询

有了这个结果我们基本上可以去查询到地址信息了,同样的在查询地址信息的时候我们也做了相应的拼接,所以最终的sql是这样的

SELECT GROUP_CONCAT(`name`) FROM address WHERE id IN (SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1);

理想中的结果如图:

mysql查询结果实现多列拼接查询

但实际上,这个语句并不能得到我们想要的结果,原因是SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1查询出的结果是一个字符串,而字符串却不能作为查询条件中In的条件来使用,所以查询的结果并不是我们想要的.

再分析下我们的思路并没有问题,那么怎么才能用这个字符串作为查询条件,并最终得出我们想要的结果呢?根据网上的资料得知,查询条件in的内容只能是数字型的,所以他并不支持字符串的查询,所以这里我们还需要一个函数,instr.说实话这也是我第一次知道这个函数,毕竟对mysql真的只是会一点增删改查的皮毛,哈哈.那么接下来我们来试试这个函数的效果,最终的sql为

SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    (SELECT
      CONCAT_WS(',', province, city, district)
    FROM
      `user`
    WHERE id = 1),
    id
  ) ;

执行后的结果也是我们想要的.当然上边的语句只是实现了查找到地址的结果,具体的可以根据业务需求继续修改,mysql的函数不得不说确实很强大.今后还是要多学习才是;

所以,最终的sql为:

SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    CONCAT(
      ',',
      (SELECT
        CONCAT_WS(',', province, city, district)
      FROM
        `user`
      WHERE id = 1),
      ','
    ),
    CONCAT(',', id, ',')
  ) ;

到此这篇关于mysql查询结果实现多列拼接查询的文章就介绍到这了,更多相关mysql 多列拼接查询内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MySQL批量更新不同表中的数据
May 11 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
MySQL深分页问题解决思路
Dec 24 MySQL
MySQL索引失效十种场景与优化方案
May 08 MySQL
mysql使用instr达到in(字符串)的效果
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 #MySQL
一文了解MYSQL三大范式和表约束
MYSQL优化之数据表碎片整理详解
Innodb存储引擎中的后台线程详解
Apr 03 #MySQL
MySQL磁盘碎片整理实例演示
Mysql使用全文索引(FullText index)的实例代码
Apr 03 #MySQL
You might like
为查询结果建立向后/向前按钮
2006/10/09 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
laravel自定义分页效果
2017/07/23 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
Python pandas用法最全整理
2019/08/04 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
linux面试题参考答案(10)
2016/10/26 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
单位实习证明怎么写
2014/01/17 职场文书
公务员综合考察材料
2014/02/01 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
社团个人总结范文
2015/03/05 职场文书
经营场所使用证明
2015/06/19 职场文书
养成教育工作总结
2015/08/13 职场文书
浅谈Python协程asyncio
2021/06/20 Python
5行Python代码实现一键批量扣图
2021/06/29 Python