我已经构建了一个接口,用户从数据库中获取记录。用户可以选择指定0个或更多的过滤器。有四种过滤器A,B,C,d(让我们说的这些都是在某个表中的字段)构建动态无失败where子句
这里是我的查询应该是什么样子:
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的情况下,这会失败。在这种情况下,假使用D来结束,并且不应用D.
有没有一种方法来与这种情况下的where子句?我也接受这个程序的解决方案,我通过代码添加或不添加子句,但我更喜欢这种方式。我真的不想有很多if-else语句。
谢谢!
+1尼斯一个,复制这个想法告诉了我答案 – Andomar
所以,当A和B被指定,而C不是时,C = C给出了我的真实性,并且A或B或真实结果在A和B中没有得到应用,所有的行都将被考虑。 –
@Caffeine Yeap。同意。我更新了SQL。我假设A,B,C是varchar字段。 –