【发布时间】:2016-12-06 14:39:16
【问题描述】:
在高层次上,这听起来微不足道,但事实证明我已经摸不着头脑了几个小时。
情况:
我有表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,则结果可能包含c 为TRUE 或FALSE
问题:
我如何编写 ONE 查询,以涵盖所有字段可能为空、部分为空或没有的情况?
【问题讨论】:
-
像这样:
where (b_input = '' or b = b_input) and (...)