0

在高层次上,这听起来微不足道,但事实证明我已经摸不着头脑了几个小时。

情况:

我有表T,有列a,b,c,d,e。列a包含一个字符串,而b,c,d,e每个列包含一个布尔值。

我允许用户执行一种搜索,我提示用户输入值a,b,c,d,e,并返回所有这些值都匹配的行。

在一个完美的世界中,用户输入所有值(比如说a="JavaScript", b="true", c="false", d="false", e="true"),结果查询(在 Scala 中,引用一个运行 MySQL 的远程数据库)可能看起来像这样:

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 + ";")

问题:

我为用户提供了“放松”约束的选项,因此a_input=""b_input=""等可能...所有字段a,b,c,d,e都可能为空("" ) 如果一个字段被省略,它不应该影响结果响应。换句话说,如果c未输入,则结果可以包含cTRUEFALSE的条目

问题:

我如何编写一个查询来涵盖所有字段可能为空、只有一些字段或没有字段的情况?

4

3 回答 3

0

只需WHERE动态构建。如果用户为其提供了一个值,而不是总是搜索c = 'whatever',只包括c在。WHERE

于 2016-12-06T15:15:31.913 回答
0

这很棘手,因为数据库包含布尔值,但参数是字符串。参数是否总是空白。'对或错'?如果是这样试试

(B_input=''
 Or (b_input=''true' and b)
   Or (b_input='false' and ((not b)))
于 2016-12-06T18:01:09.957 回答
0

你可以使用

Select *
from table 
where  a in ('','othervalue','othervalue')
and b in ('','othervalue','morevalues')

依此类推……就像对每个字段使用 or 一样,即使它是空的,它也会匹配

于 2016-12-06T14:44:05.633 回答