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 14 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL 1130异常,无法远程登录解决方案详解
Aug 23 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
MySQL主从切换的超详细步骤
Jun 28 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 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP静态成员变量
2017/02/14 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python发送Email方法实例
2014/08/21 Python
详解Python中find()方法的使用
2015/05/18 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
pandas string转dataframe的方法
2018/04/11 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python unichr函数知识点总结
2020/12/16 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
售后服务科岗位职责范文
2013/11/13 职场文书
六五普法规划实施方案
2014/03/21 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
产品质量保证书范本
2015/02/27 职场文书
法学专业求职信范文
2015/03/19 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
个人合作协议范本
2015/08/06 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
Redis如何一键部署脚本
2021/04/12 Redis