这个问题是基于我提出的SQL: Find longest common string between rows,但我没有明确解释,所以我会再试一次。 我有桌子t1:
Col1 | Col2
-------|----------------
1 | THE APPLE 123
1 | BEST THE APPLE
1 | THE APPLE 5/89
2 | BEST TASTY BANANAS
2 | BEST TASTY BANANAS 42/7
2 | THE BEST TASTY BANANAS
我想要t2:
Col1 | Col2
-----------------------------
1 | THE APPLE
2 | BEST TASTY BANANAS
我的整个表有30,000条记录。我绝不能比较超过21条记录。 Col2是varchar(100)。我正在使用Redshift。我意识到这是一个困难的问题,任何从红移中获取数据并使用某种类似的fuzzystring匹配的方式,比如Python或其他东西?感谢。
答案 0 :(得分:1)
评论太长了。
在SQL中,您想要执行的处理非常困难。您必须编写自己的聚合函数来处理昂贵且不明显的字符串操作。
你可以在Python中完成这项工作,但它的工作量仍然大致相同。
对于SQL,问题是数据的格式。为了找到最长的匹配子字符串,每个字符或单词确实需要一行。即使有这种表示,也很难,特别是对于长弦。我可以看到一个有用的应用程序是基因组学,字符串编码可能是数十或数十万个字符。
我的建议是考虑如何用Python或Java等语言在算法上解决这个问题。如果你搜索,可能会有一个内置的库来执行此操作。但是,我持怀疑态度。您可能会发现两个字符串的例程,但对于多个字符串,问题则更加困难。