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 可扩展设计的基本原则
May 14 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
mysql如何查询连续记录
May 11 MySQL
mysql使用instr达到in(字符串)的效果
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 #MySQL
一文了解MYSQL三大范式和表约束
MYSQL优化之数据表碎片整理详解
Innodb存储引擎中的后台线程详解
Apr 03 #MySQL
MySQL磁盘碎片整理实例演示
Mysql使用全文索引(FullText index)的实例代码
Apr 03 #MySQL
You might like
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
服装厂厂长职责
2013/12/16 职场文书
就业表自我评价分享
2014/02/06 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
Java无向树分析 实现最小高度树
2022/04/09 Javascript