具有不同WHERE字段的MySQL SELECT

时间:2016-12-06 14:39:16

标签: mysql where varying

在高级别,这听起来微不足道,但事实证明我已经抓了几个小时。

情况:

我有表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 查询,其中涵盖了可能所有字段都可能为空,或只是某些字段或没有字段的情况?

3 个答案:

答案 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)))