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之浅入深出页原理
Jun 23 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
千万级用户系统SQL调优实战分享
Mar 03 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
Mysql中常用的join连接方式
May 11 MySQL
单机多实例部署 MySQL8.0.20
May 15 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
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网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
详解angular element()方法使用
2017/04/08 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
Python写的一个简单DNS服务器实例
2014/06/04 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
化工机械应届生求职信
2013/11/04 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
导游词之安徽九华山
2019/09/18 职场文书
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技