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死锁和分库分表问题详解
Apr 16 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
navicat 连接Ubuntu虚拟机的mysql的操作方法
Apr 02 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 MySQL
mysql使用instr达到in(字符串)的效果
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 #MySQL
一文了解MYSQL三大范式和表约束
MYSQL优化之数据表碎片整理详解
Innodb存储引擎中的后台线程详解
Apr 03 #MySQL
MySQL磁盘碎片整理实例演示
Mysql使用全文索引(FullText index)的实例代码
Apr 03 #MySQL
You might like
香妃
2021/03/03 冲泡冲煮
php下载文件的代码示例
2012/06/29 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
不安全的常用的js写法
2009/09/15 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
原生js调用json方法总结
2018/02/22 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
Python中类型检查的详细介绍
2017/02/13 Python
Python实现完整的事务操作示例
2017/06/20 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Django中Forms的使用代码解析
2018/02/10 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Keras自定义IOU方式
2020/06/10 Python
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
学校个人对照检查材料
2014/08/26 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL