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字符串截取函数小结
Apr 05 MySQL
MySQL root密码的重置方法
Apr 21 MySQL
MySQL数字类型自增的坑
May 07 MySQL
MySQL官方导出工具mysqlpump的使用
May 21 MySQL
MySQL触发器的使用
May 24 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
MySQL常用慢查询分析工具详解
Aug 14 MySQL
SQL Server数据库的三种创建方法汇总
May 08 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将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
Python去除字符串两端空格的方法
2015/05/21 Python
Python base64编码解码实例
2015/06/21 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
车贷收入证明范本
2014/01/09 职场文书
交通事故私了协议书
2014/04/16 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2015年档案室工作总结
2015/05/23 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
python开发人人对战的五子棋小游戏
2022/05/02 Python
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers
vscode内网访问服务器的方法
2022/06/28 Servers