我正在使用oracle数据库。对于这个数据库,我必须编写一个过滤器。我正在WHERE
sql子句中进行过滤。
但是,如果过滤器不完整,我想设置SELECT * FROM Person WHERE Name = '*'
。这不起作用。是否有任何建议如何将WHERE clause
设置为所有names
而不将其删除?
感谢您的回答!
答案 0 :(得分:2)
我解释'如何将WHERE
子句设置为所有names
而不将其排除在外' as'我希望字段名Name
出现在WHERE
子句中,但我想要所有记录。
... WHERE Name like '%' or Name is null
会返回所有行(我很确定like '%'
也匹配空字符串)
过滤器的编码应动态排除或包含所选字段。换句话说:动态创建查询字符串,类似于
whereClause = '1=1';
foreach (filter in filterConditions) {
if (!filter.IsEmpty) {
whereClause += ' AND '+filter.SQLExpression
}
}
抱歉,我不熟悉Java,但我希望你能明白这一点。当然,您仍然应该引入参数(在filter.SQLExpression
中编码),而不是直接将过滤器值编码到SQLExpression中。
答案 1 :(得分:2)
您必须使用SELECT * FROM Person WHERE Name like '%'
在SQL
中,通配符为%
,而不是asterix
。和like是启用通配符搜索的运算符。
答案 2 :(得分:0)
如果Name
列必须是在表格中搜索的唯一标准,请尝试以下方式:
SELECT *
FROM Person
WHERE Name IN ( select distinct Name --fetch distinct names
from Person ) --and then search through it