过去,我从这个论坛获得了宝贵的帮助——非常感谢!对于新问题的更多帮助,我将不胜感激。
下面是包含 5 个字段(ID、F1-F4)的表格的一部分。该表向下延伸数千条记录。
Table1
ID F1 F2 F3 F4
1 A B 1 2
2 A 2 4
3 D C 8
4 F E 4 6
5 B 2
6 D F 3
7 B B 3
8 N L 1 9
9 A A 0 7
一些规则:请注意,F1 和 F2 列中的条目可以出现在任一字段中。F3 和 F4 类似。F1 和 F2 中的条目永远不会出现在 F3 和 F4 中,反之亦然。单个 Null 条目可以出现在 F1 或 F2 中。单个 Null 条目也可以出现在 F3 或 F4 中。但是,F1 和 F2(和/或)F3 和 F4 中的 Null 将永远不会出现。
初始问题(已解决):
我想在此表中搜索涉及用户输入的搜索短语排列的匹配项,例如:
F1 F2 F3 F4
A B 1 2
像下面这样的条件构造将通过允许 F1/F2 和 F3/F4 Null 之间的排列来实现这一点。
"WHERE (F1 In ('A','B') OR F1 is Null) AND (F2 In ('A','B') OR F2 Is Null)
AND (F3 In (1,2) OR F3 为 Null) AND (F4 In (1,2) OR F4 为 Null)"
VBA 用于根据用户的搜索词组构造“In (..)”语句。对于上述情况,记录集将包含记录 1 和 5(允许记录 5,因为它不包含带有搜索短语的条目,但可能包含 Null)。
新问题(未解决——我在这方面有点挣扎):
作为一项附加功能,并且为了极大地造福最终用户,我现在想显示最接近搜索短语(4/4 匹配)的记录,排序为最远的记录(0/4 匹配),即:
ID F1 F2 F3 F4 Matches
1 A B 1 2 4
5 B 2 4
2 A 2 4 2
7 B B 3 2
9 A A 0 7 2
5 B 7 1
8 N L 1 9 1
3 D C 8 0
4 F E 4 6 0
6 D F 3 0
请注意新字段 Matches,它显示搜索短语和搜索表之间可接受的匹配数。请注意,空值计入匹配。另请注意,搜索短语中的条目可以重复并计入可接受的匹配项(记录 7 和 9 中的 F1 和 F2 字段),因此,上面的 sql 构造。
是否可以在 sql 中相对轻松地做到这一点?
先感谢您。