在高级别,这听起来微不足道,但事实证明我已经抓了几个小时。
情况:
我有表T
,列a,b,c,d,e
。列a
包含一个字符串,而b,c,d,e
每个都包含一个布尔值。
我允许用户执行一种搜索,其中我提示用户输入a,b,c,d,e
的值,并返回这些值全部匹配的所有行。
在完美世界中,用户输入所有值(例如a="JavaScript"
,b="true"
,c="false"
,d="false"
,{{1并且生成的查询(在Scala中,引用运行MySQL的远程数据库)可能看起来像这样:
e="true"
问题:
我向用户提供了“放松”的选项。约束,因此有可能 a_input ="" 和 b_input ="" 等......可能全部字段 a,b,c,d,e 可以为空("" )如果省略字段,则不应影响结果响应。换句话说,如果未输入connection.createStatement().executeQuery("SELECT * FROM T
WHERE a = '" + a_input + "'
and b = " + b_input + "
and c = " + c_input + "
and d = " + d_input + "
and e = " + e_input + ";")
,则结果可以包含c
TRUE 或 FALSE
问题:
如何编写 ONE 查询,其中涵盖了可能所有字段都可能为空,或只是某些字段或没有字段的情况?
答案 0 :(得分:0)
你可以使用
Select *
from table
where a in ('','othervalue','othervalue')
and b in ('','othervalue','morevalues')
依此类推.....就像使用一个或每个字段一样,即使它是空的也会匹配
答案 1 :(得分:0)
动态构建WHERE
。如果用户为其提供了值,则只需在c = 'whatever'
中包含c
,而不是始终搜索WHERE
。
答案 2 :(得分:0)
这很棘手,因为DB包含布尔值,但parms是字符串。 parms是否总是空白。 ' true'或' false'?如果是这样,试试
(B_input=''
Or (b_input=''true' and b)
Or (b_input='false' and ((not b)))