我对SQL比较陌生,并试图为我创建的3个表(A,B和C)的数据库设计查询。它是一个允许用户从表A输入两个参数(日期和行)的查询,如果用户将行输入留空,则返回所有记录。这很有效。
现在我的问题是我也包含了两个子查询。这些是分别使用第一个查询的共享参数输入查询表B和C.如果我尝试允许空用户输入返回所有记录,我无法正确显示结果。
主要查询的语句:
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))
使用子查询的位置或对子查询进行同样的操作不起作用:
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语句,那么子查询工作正常并返回正确的结果,但是当用户输入为空时我无法返回所有记录。
我感谢任何帮助!我意识到这可能非常混乱和低效。
答案 0 :(得分:0)
在你的WHERE子句中:
WHERE (b.day)>=[Start Date]
And (b.day)<=[End Date]
And b.line=[Enter Line]
or (...)
您将And
与or
组合在同一语句中,而不使用括号来显式设置逻辑优先级。试试这个:
WHERE ( (b.day)>=[Start Date]
And (b.day)<=[End Date]
And b.line=[Enter Line]
) or (...)