希望我没有简化过程,
我有2个表:tblTestA和tblTestB
两个表都通过其公共ID字段链接。 我想从tblTestA中选择日期大于#2013/01/01#日期字段的所有记录。 然后,从这个记录集中,进一步过滤,只保留那些在TllTest2中在Field1或Field2中至少有1个非Null值的记录(即删除双Null)
有没有办法修改以下不可行/伪代码,以便实现上述目标?
SELECT tblTestA.ID, tblTestB.Field1, tblTestB.Field2
FROM tblTestA
WHERE tblTestA.Date > #2013/01/01#
Inner Join tblTestB
On tblTestA.ID= tblTestB.ID
Where (Not IsNull(tblTestB.Field1)) Or (Not IsNull(tblTestB.Field2));
在真实场景中(由于表的结构方式,它们的大小和其他因素)仅查询非Null需求需要很长时间。仅在大于#2013/01/01#要求的日期查询只需要很少的时间。所以我想如果我们可以返回较小的日期要求结果集,然后使用公共ID字段对非空检查执行第二次过滤,那么整个查询可能会更快完成。
修改 将上述内容修改为......
SELECT tblTestA.ID, tblTestB.Field1, tblTestB.Field2
FROM tblTestA
Inner Join tblTestB
On tblTestA.ID= tblTestB.ID
WHERE tblTestA.Date > #2013/01/01#
AND
(Not tblTestB.Field1 Is Not Null) Or (tblTestB.Field2 Is Not Null);
...返回所需日期范围内的记录,但似乎也将非Null过滤器链接到同一日期范围。可能已在日期范围要求过滤器之前输入Field1和Field2的条目。我可能过度简化了实际场景中的内容,但我希望做两件事:1。在日期范围内返回记录,然后2.从这个结果集中筛选出任何至少没有一个记录的记录Field1中的非空值或来自任何日期范围的Field2 。