mysql 判断字符串是否有交集

mysql 判断字符串是否有交集,第1张

DROP FUNCTION IF EXISTS `INTE_ARRAY` delimiter // -- 集合交集检查函数 -- @param varchar(255) setA A 集合 如 "1,3,5,9" -- @param varchar(255) setB B 集合 如 "8,2,3,7" -- @return int(1) B 集合内单元在 A集合 内存在则返回 1 否则返回 0 CREATE FUNCTION `INTE_ARRAY` (setA varchar(255),setB varchar(255)) RETURNS int(1) BEGIN DECLARE idx INT DEFAULT 0 -- B 集合单元索引 DECLARE len INT DEFAULT 0-- B 集合表达式长度 DECLARE llen INT DEFAULT 0-- 最后检查位置 DECLARE clen INT DEFAULT 0-- 当前检查位置 DECLARE tmpStr varchar(255)-- 临时检查数据集 DECLARE curt varchar(255)-- B 当前检查的单元 SET len = LENGTH(setB) WHILE idx <len DO SET idx = idx + 1 SET tmpStr = SUBSTRING_INDEX(setB,",",idx) SET clen = LENGTH(tmpStr) -- 获取当前 setB 中的单元 IF idx = 1 THEN SET curt = tmpStr ELSE SET curt = SUBSTRING(setB,llen+2,clen-llen-1) END IF -- 检查是否存在于 setA 中 IF FIND_IN_SET(curt,setA) >0 THEN RETURN 1 END IF -- 当前检查终点与上次检查终点相同则跳出 IF clen <= llen THEN RETURN 0 END IF SET llen = clen END WHILE RETURN 0 END // delimiter select INTE_ARRAY("1,3,5,9","8,2,3,7") as is_inte_array --select INTE_ARRAY("1,3,5,9","2,8,6,10") as is_inte_array --select INTE_ARRAY("10,3,5,9","2,8,6,10") as is_inte_array --select INTE_ARRAY("1,30,5,9","2,8,6,10") as is_inte_array --select INTE_ARRAY("1,30,5,9","2,30,6,10") as is_inte_array

你是要查前十个查询结果中相同的那些记录,而不求前十个相同记录吧,因为这是有差别的,按照你的语句,应该是求前者,即先求出A的前十条数据,B的前十条数据,再求它们的交集。

既然是求交集,那么这两个表的关系模式应该是相同的了,

select

a.*

from

(select

*

from

table

order

by

table.a

desc

limit

10)

as

a,

(select

*

from

table

order

by

table.b

desc

limit

10)

as

b

where

a.primary_key

=

b.primary_key

--先将两个结果作为两张临时表,然后通过主键

primary_key来获取交集(交集肯定就是主键相等的了,因为关系模式相同)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8616696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存