sql - 匹配多个字段组合的记录

标签 sql linq algorithm math matching

我有一个数据表如下

FName  SName  DOB  PCode   Addr1     
====   ==== ====== =====   =======  
Bob    Test 231280 S66TH   1 Test Lane  
Bobby  Test 240977 S66TH   2 Test Drive
Robert Test 240977 xxxxx   xxxxxx
Tim    Test 140977 S78YH   5 Hill Road

我正在尝试编写一个将接受参数 FNAme、SName、Dob、PCode 和 Addr1 的函数/SP。我希望能够匹配 5 个参数中任意 3 个参数相等的记录。我不确定如何在不编写一长串 AND OR 语句的情况下执行此操作?我非常希望该解决方案也具有可扩展性,因此如果将来添加另一列,则 6 列中的 3 列必须匹配(甚至 6 列中的 4 列)。我也不介意由 Linq 表示的查询。

本质上,我正在寻找一种可以匹配 y 条数据中的 x 条的匹配算法。

最佳答案

将真正的比较转换为 1,错误的比较转换为 0,将它们全部相加,并测试总和是否至少为 3。类似的东西

where (case FName when @FName then 1 else 0 end)
    + (case SName when @Sname then 1 else 0 end)
    + (case DOB   when @DOB   then 1 else 0 end)
    + (case PCode when @PCode then 1 else 0 end)
    + (case Addr1 when @Addr1 then 1 else 0 end)
    >= 3

关于sql - 匹配多个字段组合的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6933004/

相关文章:

SQL计数麻烦

c# - 查号码最简单的方法

algorithm - 在大小为 m 和 n 的 2 个排序列表的并集中找到第 k 个最小元素,效率为 log(k)

c++ - 如何从算法上优化此代码?将 N 个科目分配给 N 个学生的方法有多少种?

javascript - 计算数组中随机生成的元素?

sql - 从表中获取第一条唯一记录

sql - 查找半径重叠的Geopoint

java - 如何使用java-使用多线程或循环在Oracle SQL中多次更新表

c# - 在 LINQ 中使 UNION 查询更高效

c# - IEnumerable<T> 上的延迟 OrderBy