如何在不使用大型结果集的情况下检查一个字符串是不是是另一个字符串的子字符串?

Posted

技术标签:

【中文标题】如何在不使用大型结果集的情况下检查一个字符串是不是是另一个字符串的子字符串?【英文标题】:How to check if a string is a substring of another, without using large ResultSets?如何在不使用大型结果集的情况下检查一个字符串是否是另一个字符串的子字符串? 【发布时间】:2011-10-31 04:06:27 【问题描述】:

我正在尝试用 java 编写一个 webprice 比较软件。我有一个数据库,其中已经有很多产品类型编号(如“ASD01”)。我还有另一个数据库,其产品类型编号如下:'somethingASD01something'。

我想检查数据库#2 是否包含数据库#1 中的字符串。并删除不包含的行。我试图解决它,在结果集中选择两个 db,并在 java 代码中比较它们,但是它们太大并且使用太多内存。

我在 mysql 中找到了 LOCATE() 方法,它告诉我我想要什么,但我仍然要使用 database#1 作为 ReultSet,或者还有其他方法可以遍历行吗?

【问题讨论】:

【参考方案1】:

如果我正确理解了这个问题,您应该能够使用直接 SQL 删除您不想要的记录...

如果您想从 DB2 中删除 不匹配 到 DB1 中的表的记录,那么 LEFT JOIN 将是一种方法... DB2 LEFT JOIN DB1 在您的字符串比较上,然后删除没有 DB1 匹配的任何 DB2 记录:

DELETE `DB2`.`TableTwo`.*

FROM `DB2`.`TableTwo` a
LEFT JOIN `DB1`.`TableOne` t

on a.FieldFromTableTwo LIKE CONCAT('%', t.FieldFromTableOne, '%')

WHERE t.FieldFromTableOne IS NULL

【讨论】:

哦,抱歉,您似乎不想删除匹配项,您想从 DB2 中删除与 DB1 中的内容不匹配的记录.. 嗯,我会修改。 a.FieldName LIKE = "%ASD01%" 不会很快。它必须全面扫描a 表。 如果您只需要该操作一次(并删除一些行),那么我认为您不必担心。 没错,它不会很快。但目前尚不清楚他是否需要只运行一次或按需运行的东西。这是我能想到的最简单的答案,可能正是他所需要的。 是的,而且可能比 LOCATE() 更快。

以上是关于如何在不使用大型结果集的情况下检查一个字符串是不是是另一个字符串的子字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不手动检查的情况下确定网站是不是使用 webassembly?

在 Ruby 中,我可以在不使用正则表达式的情况下检查字符串是不是包含字母吗?

如何在不使用 SafeArea 的情况下检查设备是不是有缺口?

如何在不阻塞事件循环的情况下迭代大型列表

如何在不使用 sqrt 的情况下检查整数是不是是完美的正方形 [重复]

如何在不下载的情况下使用其 URL 检查文件是不是存在?