【问题标题】:Null user input on subquery criteria子查询条件上的空用户输入
【发布时间】:2013-07-31 18:27:43
【问题描述】:

我对 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 尝试相同的操作不起作用:

    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 语句,子查询可以正常工作并返回正确的结果,但是当用户输入为空白时,我无法返回所有记录。

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

【问题讨论】:

    标签: sql ms-access subquery


    【解决方案1】:

    在您的 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 (...)
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      相关资源
      最近更新 更多