我正在构建一个覆盖几个WHERE AND条件的查询。这是一个例子:
...
WHERE stage1 = 3
AND stage2 = 3
AND stage3 = 3
AND stage4 = 3
AND stage5 = 3
AND submitted = 0
是否有更短的写作方式,可能像WHERE TRUE(stage1=3 & stage2=3 ...)
?
编辑 - 仅供参考,以下是表格:
答案 0 :(得分:6)
更短的写作方式是:
WHERE (stage1, stage2, stage3, stage4, stage5, submitted)
= (3, 3, 3, 3, 3, 0)
不管怎么说,不管怎么说都不会更快。
答案 1 :(得分:2)
不,没有。你建议的符号并不是很短。 :)
为什么你需要它更短,你有什么表结构,所有这些阶段字段应该是3?
[edit]添加了一个从假设细节表中查询阶段的解决方案。
select
*
from
FormsTable f
where
f.submitted = 0 and
not exists
(select 'x'
from
PageDetailTable d
where
d.FormId = f.FormId and
d.State <> 3)
目前这种情况并不短,但是当您获得由更多(或更少)页面组成的更复杂的表单时,您可以更轻松地支持这一点。创建表单时,将为其包含的每个页面创建一条记录。在页面记录中,您不仅可以存储状态,还可以存储您可能需要的其他数据。当您获得具有更多或更少页面的不同类型的表单时,您可以创建这些页面。此查询仅检查表单是否未提交以及是否没有任何尚未完成的页面。无论有多少页都无关紧要。