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语句修改表名的实现
Apr 07 MySQL
MySQL创建索引需要了解的
Apr 08 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
May 26 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
mysql中数据库覆盖导入的几种方式总结
Mar 25 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
mysql函数之截取字符串的实现
Aug 14 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
mysql使用instr达到in(字符串)的效果
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 #MySQL
一文了解MYSQL三大范式和表约束
MYSQL优化之数据表碎片整理详解
Innodb存储引擎中的后台线程详解
Apr 03 #MySQL
MySQL磁盘碎片整理实例演示
Mysql使用全文索引(FullText index)的实例代码
Apr 03 #MySQL
You might like
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
python写日志封装类实例
2015/06/28 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
opencv python图像梯度实例详解
2020/02/04 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
Django Form常用功能及代码示例
2020/10/13 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
工程项目经理岗位职责
2013/12/15 职场文书
财务经理的岗位职责
2013/12/17 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书