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之PXC集群搭建的方法步骤
May 25 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
一文弄懂MySQL索引创建原则
Feb 28 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
pt-archiver 主键自增
Apr 26 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 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列出一个目录下的所有文件的代码
2012/10/09 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
15行Python代码带你轻松理解令牌桶算法
2018/03/21 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
几个SQL的面试题
2014/03/08 面试题
单位在职证明范本
2014/01/09 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL