比较打开的SQL中4个字段的重复项



我想比较打开的SQL中的4个字段是否存在重复。

场景:用户有4个字段要输入。名字(N1)、姓氏(N2)、附加名字(N3)和附加姓氏(N4)。

现在算法是这样工作的:它连接N1+N2+%,然后N2+N1+%。因此,如果用户在任何字段中输入,查询将查找N1N2%或N2N1%。这意味着对于2个字段,有2个!可能的组合。现在有了2个额外的字段,这个算法就会爆炸,因为会有4个!要检查的组合。有什么办法解决这个问题吗?

注意:我们进行这种组合检查是因为用户可以在任何给定的输入字段中输入数据。所以我们检查所有字段的组合。不幸的是,这一点无法改变。

编辑:我不能假设订单是以前这样设计的。因此,组合的复杂性。

第2版:我喜欢检查单个零件的想法。但理想情况下,我们要做的是将所有字符串连接在一起,并在DB中检查子字符串。在opensql中,它是使用like语句完成的。我们的DB表已经为N1+N2组合存储了这样的连接字符串。现在需要将其扩展到4个字段。

问题的关键是用前导和尾随的"%"分别检查所有名称部分,并根据名称部分的总和检查数据库条目的总大小:

field=('%'+N1+'%')AND field=('%'+N2+'%'

这将找到匹配项。您可以使用它来选择名称的标准化串联,并使用GROUP BY和HAVING count(*)>1来搜索重复项。

如果用户不关心订单,而您想检查重复项,那么我认为以下条件似乎符合您的标准。

SELECT ...
FROM ...
INTO TABLE ...
WHERE N1 IN (@INPUT_N1, @INPUT_N2, @INPUT_N3, @INPUT_N4)
AND N2 IN (@INPUT_N1, @INPUT_N2, @INPUT_N3, @INPUT_N4)
AND N3 IN (@INPUT_N1, @INPUT_N2, @INPUT_N3, @INPUT_N4)
AND N4 IN (@INPUT_N1, @INPUT_N2, @INPUT_N3, @INPUT_N4).
IF sy-dbcnt > 0.
"duplicates found, do something...
ENDIF.

当然,当数据库中存在垃圾时,例如所有四个字段都相同,那么这将不会返回真正的重复。

相关内容

  • 没有找到相关文章

最新更新