当前位置:网站首页> mysql拆分字符串作为查询条件的示例代码
mysql拆分字符串作为查询条件的示例代码
2022-07-06 15:36:00 【1024问】
mysql.help_topic
REPLACE
LENGHT
substring_index
分析
有个群友问一个问题

这表的ancestors列存放的是所有的祖先节点,以,分隔
例如我查询dept_id为103的所有祖先节点,现在我只有一个dept_id该怎么查
然后我去网上找到这样一个神奇的sql,改改表名就成了下面的这样
SELECTsubstring_index( substring_index( a.ancestors, ',', b.help_topic_id + 1 ), ',',- 1 ) AS shareholder FROMsys_dept aJOIN mysql.help_topic b ON b.help_topic_id < ( length( a.ancestors ) - length( REPLACE ( a.ancestors, ',', '' ) ) + 1 ) WHEREdept_id = 103 
嗯,没错结果出来了,然后我就很好奇,什么原理,一个个来看
mysql.help_topic这个是一个mysql自带的帮助解释注释表,查询结果如下

id从0开始,我这个版本最大id到584,版本不同应该id最大值也不一样,这个表的作用一会说
REPLACE这个函数应该都知道吧,替换字符用的

获取字符串的长度

查分字符串,三个参数,要拆分的字符串,根据拆分的字符,从第几个开始
如果最后的那个参数为正数则从左开始数,然后获取对应下标左边的所有字符
如果为负数,则从右边开始数,获取对应下标右边的所有字符串,这个就不演示了


先来看第一段
( length( a.ancestors ) - length( REPLACE ( a.ancestors, ',', '' ) ) + 1 )我们假设当前数据的ancestors值为 0,100,101 那么第一个length(a.ancestors)的值就是9 减去后面的一段
length( REPLACE ( a.ancestors, ',', '' ) ) 因为我们假设的值里面有两个 , 所以length为7 最后在加1 那么这段值为 3
和前面的 join on条件能查出的数据也就是mysql.help_topic这个表中所有id小于3的数据,也就是id为0,1,2的三条数据
那么现在先来看看这样查询的结果是啥

那么我们假设现在是第一行,mysql.help_topic表中的help_topic_id为0
substring_index( substring_index( a.ancestors, ',', b.help_topic_id + 1 ), ',',- 1 )最里面的substring_index 拆分后为0,因为没有能在拆分的了所以外面的substring_index返回的也是0
第二行help_topic_id为1的时候获取结果为0,100
然后执行外层的substring_index 根据,拆分,值为-1 所以从右边找一位,获取的值就是100
第三行结果为0,100,101,外层substring_index 执行后结果为101
....只能心中大喊牛逼
那么现在知道mysql.help_topic这个表的作用了吗?就是用来对拆分出的数据分行,专业点叫笛卡尔积 (真的不懂..)
这种方法也有缺点:就是拆出的行数不能大于mysql.help_topic这个表的数据条数
到此这篇关于mysql拆分字符串作为查询条件的示例代码的文章就介绍到这了,更多相关mysql拆分字符串查询内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
- Word2vec (skip gram and cbow) - pytorch
- The difference between enumeration and define macro
- memcached
- Sword finger offer question brushing record 1
- 监控界的最强王者,没有之一!
- BasicVSR_PlusPlus-master测试视频、图片
- 【编译原理】做了一半的LR(0)分析器
- Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
- What are the specific steps and schedule of IELTS speaking?
- [leetcode] 19. Delete the penultimate node of the linked list
猜你喜欢

Word2vec (skip gram and cbow) - pytorch

Matlab tips (27) grey prediction

Enterprises do not want to replace the old system that has been used for ten years

Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)

Advantages of link local address in IPv6

On file uploading of network security

剑指offer刷题记录1

Export MySQL table data in pure mode

案例推荐丨安擎携手伙伴,保障“智慧法院”更加高效

cuda 探索
随机推荐
Matlab tips (27) grey prediction
Let's see through the network i/o model from beginning to end
pytorch_ Yolox pruning [with code]
[leetcode] 19. Delete the penultimate node of the linked list
Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
Return keyword
Comparison between variable and "zero value"
UDP programming
CocosCreator+TypeScripts自己写一个对象池
2014 Alibaba web pre intern project analysis (1)
General implementation and encapsulation of go diversified timing tasks
企業不想換掉用了十年的老系統
室内LED显示屏应该怎么选择?这5点注意事项必须考虑在内
CSDN 上传图片取消自动加水印的方法
Cocoscreator+typescripts write an object pool by themselves
Sword finger offer question brushing record 1
npm无法安装sharp
案例推荐丨安擎携手伙伴,保障“智慧法院”更加高效
Is "applet container technology" a gimmick or a new outlet?
第十九章 使用工作队列管理器(二)