mysql根据逗号分割的字符串去关联查询另外一个表的数据
1、说明
在做显示数据的时候,一个字段会存那种逗号分割的字符串,那如何去根据逗号分割字符串去查询另一个表的数据呢?
首先我们查看一下需要显示的数据
select * from company where f_id in ('','','')
select * from company where f_id in ('210,205,208')
现在我要根据另一张模板表中的一个字段查询他下面的公司,存的是字符串类型
这时
select * from company where f_id in (select company_id from templet where f_id=583)
只查询出一条数据,说明他查询的结果是一个字符串'210,205,208',而我们需要的是'210','205','208',
这时会想到分割,但是发现需要循环很麻烦。这里提供正则表达式的方式解决如下
先把字符串替换成正则需要的样式,把‘210,205,208’转成210|205|208,再用正则匹配
SELECT
GROUP_CONCAT(f_tran_type_name)
FROM
company
WHERE
f_id REGEXP (
SELECT
REPLACE (
(
SELECT
company_id
FROM
templet
WHERE
f_id = 583
),
',',
'|'
)
)
2、优化
我们可以根据自己的需要写一个函数
def replace_sql(table, value, conditions):
'''
根据逗号分割的字符串去关联查询另外一个表的数据
@table,表名-list[table1(存字典表), table2(存分割的字符串的表)]
@value,返回的字段-list[table1_str, table2_str, table1_where_str]
@conditions, 条件-dict
'''
sql = """SELECT GROUP_CONCAT({table1_str}) `names` FROM {table1} WHERE
{table1_where_str} REGEXP (SELECT REPLACE ((SELECT {table2_str} FROM
{table2} WHERE {con} ),',','|'));
"""
con = dict_2_str(conditions)
res_sql = sql.format(table1=table[0], table2=table[1],
table1_str=value[0], table2_str=value[1], table1_where_str=value[2],
con=con)
return res_sql
def dict_2_str(dictin):
'''
将字典变成,key='value',key='value' 的形式
'''
tmplist = []
for k, v in dictin.items():
tmp = "%s='%s'" % (str(k), str(v))
tmplist.append(' ' + tmp + ' ')
return ','.join(tmplist)
如看详细https://www.cnblogs.com/edison20161121/p/7839950.html
mysql根据逗号分割的字符串去关联查询另外一个表的数据的更多相关文章
- Java将一段逗号分割的字符串转换成一个数组
String 类:String 类代表字符串.Java 程序中的所有字符串字面值都作为此类的实例实现.字符串是常量,它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象是 ...
- Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列
Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列 前台传来的字符串:'589,321' SELECT*FROM TAB_A T1 WHERE T1.CODE IN ( SEL ...
- java基础面试题:如何把一段逗号分割的字符串转换成一个数组? String s = "a" +"b" + "c" + "d";生成几个对象?
package com.swift; public class Douhao_String_Test { public static void main(String[] args) { /* * 如 ...
- Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析
Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”.想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5. 一.最终实现的sql语 ...
- mysql中把一个表的数据批量导入另一个表中
mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...
- MySQL查询近一个月的数据
MySQL查询近一个月的数据 近一个月统计SQL select user_id, user_name, createtime from t_user where DATE_SUB(CURDATE(), ...
- MySQL如果频繁的修改一个表的数据,那么这么表会被锁死。造成假死现象。
MySQL如果频繁的修改一个表的数据,那么这么表会被锁死.造成假死现象. 比如用Navicat等连接工具操作,Navicat会直接未响应,只能强制关闭软件,但是重启后依然无效. 解决办法: 首先执行: ...
- MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据
场景: 表名:testsuer id name 1 小红,小李,李红,小法 要结果值为: 1 小红 1 小李 1 李红 1 小法 MYSQL函数解释 ...
- sql server字段是逗号分割的id,关联明细表查询
有时候一张表的一个字段是以逗号分割的一个字符串,分割的数字是明细表的主键id. 关联明细表查询可以这样做: ) ) --这是把areanos字段赋值给@areanos变量 set @areanos=' ...
随机推荐
- CDN百科 | 最近,你的APP崩了吗?
过去几个月里,#xxx崩了#这个话题频繁出现在热搜榜上,让不少程序员小哥哥瑟瑟发抖. 从疫情宅家时期著名的视频APP“三连崩”,到全面复工开课后的在线教育平台与办公软件频繁宕机,再到报复性消费引发的点 ...
- HDU-3033 I love sneakers! 题解
题目大意 有 n 个物品,分成了 k 组,每个物品有体积和价值,把 n 个物品放到容量为 V 的背包中,保证每组至少放一件,求能获得的最大价值,如果不能实现,输出"Impossible&qu ...
- 提高网站访问性能之Tomcat优化
一.前言 tomcat 服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了,对于tomcat的优化,主要是从2个方面入手,一是tomcat本身的配置,另一个是t ...
- “进大厂大半年,每个月都想走!”大公司 VS 小公司到底该如何选择?
前言 江湖风云不断,有人吐槽阿里996,也有人吐槽华为狼性文化,这不,就看到有腾讯员工吐槽“进腾讯大半年,每个月都想走!” “和我一样,进去一周就想走”.“我都陷入自我怀疑了,以为自己适应不了大公司” ...
- el-table 表格加图片、加音频、加序号、多级动态表头
elemnet-ui组件库大家应该不陌生,在展示多条结构类似的数据方面,el-table可谓扛把子,不仅可以把数据展示的整齐,还支持排序.筛选或其他自定义操作.那么,除了上述的基本功能外,你还遇到过哪 ...
- ubuntu18.04安装qt时候的错误解决
在ubuntu系统下安装好qt5.5后启动qtceator时提示: Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库Qt5 ...
- 大话微服务(Big Talk in MicroService)
下面开始分析我的microservice 之旅. what? 是什么 why? 为什么 how? 什么做 1.什么是微服务 microservice 是 SOA(Service-Oriented Ar ...
- python实现装饰器
#编写一个装饰器 def zs(x): def h(): return ""+x() return h @zs def hhh(): return "你好" p ...
- 什么是Galil(加利尔)运动控制卡,它是用来干嘛的呢?galil开发文件dmc32.dll,动态链接库,API
什么是Galil(加利尔)运动控制卡,它是用来干嘛的呢?运动控制卡是基于PC总线,利用高性能微处理器(如 DSP)及大规模可编程器件实现多个伺服电机的多轴协调控制的一种高性能的步进/伺服电机运动控制卡 ...
- Python在Linux下编译安装
[准备环境] Linux centos [前言] 1 linux下默认带Python,带的是2.7版本的 ,如果需要升级版本,需要把系统的自带的Python改名或者卸载,再次安装你所需要的Python ...