子查询条件上的空用户输入

时间:2013-07-31 18:27:44

标签: sql ms-access subquery

我对SQL比较陌生,并试图为我创建的3个表(A,B和C)的数据库设计查询。它是一个允许用户从表A输入两个参数(日期和行)的查询,如果用户将行输入留空,则返回所有记录。这很有效。

现在我的问题是我也包含了两个子查询。这些是分别使用第一个查询的共享参数输入查询表B和C.如果我尝试允许空用户输入返回所有记录,我无法正确显示结果。

  1. 主要查询的语句:

    HAVING (((A.Line)=[Enter Line]) AND ((A.Day)>=[Start Date] And (A.Day)<=[End Date])) OR (((A.Day)>=[Start Date] And (A.Day)<=[End Date]) AND (([A].[line] Like [Enter Line]) Is Null))
    
  2. 使用子查询的位置或对子查询进行同样的操作不起作用:

    where (b.day)>=[Start Date] And (b.day)<=[End Date] And b.line=[Enter Line] or (((b.Day)>=[Start Date] And (b.Day)<=[End Date]) AND ([b].[line] Like [Enter Line]) Is Null))
    
  3. 如果我删除了尝试考虑空输入的or语句,那么子查询工作正常并返回正确的结果,但是当用户输入为空时我无法返回所有记录。

    我感谢任何帮助!我意识到这可能非常混乱和低效。

1 个答案:

答案 0 :(得分:0)

在你的WHERE子句中:

WHERE (b.day)>=[Start Date] 
  And (b.day)<=[End Date] 
  And b.line=[Enter Line] 
   or (...)

您将Andor组合在同一语句中,而不使用括号来显式设置逻辑优先级。试试这个:

WHERE (    (b.day)>=[Start Date] 
       And (b.day)<=[End Date] 
       And b.line=[Enter Line] 
      ) or (...)