日常中遇到的mysql问题(长期更新)
1. mysql一个字段多个值关联另一张表
假设表group:
id | group_name | node_id |
1 | 1 | 13,11,16,159 |
表node:
id | ip |
13 | 1.1.1.1 |
11 | 2.2.2.2 |
16 | 3.3.3.3 |
159 | 4.4.4.4 |
需求:查找出表group中node_id对应的ip
语句:
select t.group_name, (select GROUP_CONCAT(a.ip) from node a where FIND_IN_SET(a.id,t.node_id))nodeip from group t ;
执行结果:
+-----+-------------------------------
| 1 | 1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4 |
解释:
GROUP_CONCAT 这个函数作用是把相同的数据放在一起,因为源数据13,11,16,159 要替换成对应的ip,而且保持在一起,所以 用 GROUP_CONCAT(a.ip),[a是node表,后面的node a ,代表把node别名为a,这是为了多次使用可以简写的缘故 ]
FIND_IN_SET 这个函数是这个语句的关键所在,普通的FIND_IN_SET作用如下:
SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
SELECT FIND_IN_SET('e','a,b,c,d');
-> 0
如果第一个字段在第二个字段里面有值,则返回对应位置,没有则返回0
配合where,where FIND_IN_SET(a.id,t.node_id) 就可以解释为,a表id在t表中的node_id有值,限定了查找范围
所以整个语句大概可以这么解释:
从表group中查找 group_name,nodeip(当node表中的id在group表中的node_id有值的时候,查找对应ip放在一起) 、
[()里面是子语句,它的执行结果作为nodeip的值]
- 遇到的问题笔记以及解决方案【长期更新】
- Django 使用 MySQL 存储时间中遇到的问题(在数据库中记录插入时间、更新时间、删除时间)
- 记录工作中遇到的一些问题(长期更新)
- 我遇到的mysql问题(连续更新)
- 【Web前端】学习中遇到的问题(长期更新)
- MySQL使用中遇到的问题及日常操作累积(持续更新)
- mysql启动遇到一的些问题(持续更新中)
- 从MySQL 5.5迁移到Mariadb 10.1.14所遇到的问题
- Win10更新后,MySQL服务莫名消失的问题
- 安装widows mysql 免安装版(zip) 步骤详解 以及遇到问题解决 以及忘记密码的修改方法
- MYSQL遇到的问题--windows: Access denied for user 'root'@'localhost'
- 使用Mysql遇到的几个数据类型/格式的问题
- mysql安装及遇到的问题
- Windows10+VM 15.0 +Ubuntu 16.04 +ROS kinetic + Realsense D435i 遇到的问题(不定时更新)
- Windriver 安装和PCIE设备调试遇到的问题记录(持续更新)
- App版本更新时对SQLite数据库升级或者降级遇到的问题
- 工作中遇到问题 & TIPS(持续更新)
- 关于在Centos7 Docker中安装mysql,Navicat连接所遇到的问题
- Android Stock Browser Web App开发当中遇到的问题(持续更新)
- 项目适配iOS9遇到的一些问题及解决办法(更新两个小问题)