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问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 MySQL
mysql数据库如何转移到oracle
Dec 24 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 sprintf()函数用例解析
2011/05/18 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
PHP7 标准库修改
2021/03/09 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
vue mounted组件的使用
2018/06/18 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python 爬虫的工具列表大全
2016/01/31 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
python SOCKET编程基础入门
2021/02/27 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
怎么写好自荐信
2013/10/30 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
复活读书笔记
2015/06/29 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS