我建立了一个界面,用户从数据库中获取记录。用户可以选择指定 0 个或多个过滤器。有四个过滤器A,B,C,D(假设这些是某个表中的字段)
这是我的查询应该是这样的:
select * from table
where (A = v1 or B = v2 or C = v3) and D = v4
我试图用一种方法来制定查询,而当指定一个特定的过滤器时,它会被应用,如果不是,它会被忽略。但这应该适用于所有 16 种情况。
到目前为止,我能够想出的是这些方法:
select * from table
where (
(A = v1 and 1)
or (B = v2 and 1)
or (C = v3 and 1)
)
and D = v4
v1
或其他值在未指定时设置为 -1。因此,如果未指定它们,它们将被简单地忽略,因为随后会使用另一个过滤器(来自 A、B、C)。但是在没有指定 A、B 和 C 的情况下,这将失败。在这种情况下,false 与 D 进行 Anded,并且不应用 D。
有没有办法为这种情况提供 where 子句?我也对这个程序的解决方案持开放态度,我通过代码添加或不添加子句,但我更喜欢这种方式。而且我真的不想有很多 if-else 语句。
谢谢!