1

我对 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 或 have on 子查询尝试相同的操作不起作用:

    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))
    

如果我删除试图解释空输入的 or 语句,子查询可以正常工作并返回正确的结果,但是当用户输入为空白时,我无法返回所有记录。

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

4

1 回答 1

0

在您的 WHERE 子句中:

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

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

WHERE (    (b.day)>=[Start Date] 
       And (b.day)<=[End Date] 
       And b.line=[Enter Line] 
      ) or (...)
于 2013-07-31T18:55:04.643 回答