SQL查询,根据两个值检索数据

时间:2016-09-05 10:18:49

标签: sql

我需要创建一个查询,其中我有三个输入:名称,姓氏和城市。

当用户只输入名称时,代码应显示具有给定名称的所有用户。如果用户输入名称和城市,则代码应显示该给定城市中具有给定名称的所有人。

在我目前的情况下,我的代码不会显示具有给定城市的给定名称的人,而是显示具有给定名称的所有人,无论城市如何。有人可以给我一些参考吗?

这是我的代码:

String filterQuery = "FROM Workers WHERE name='" + name + "'OR last_name='" + last_name + "'AND city='" + city + "'";

7 个答案:

答案 0 :(得分:1)

尝试:

 String filterQuery = "FROM Workers WHERE name like '%" + name + "%'and last_name like'%" + last_name + "%'AND city like'%" + city + "%'";

这否定了对OR的需求

答案 1 :(得分:1)

这应该是您的查询:

IN

答案 2 :(得分:1)

使用这样的方法存在一些问题 - 尤其是通常的well documented SQL注入攻击漏洞。

但是,除此之外,您需要将逻辑语句包装在一些括号中,以便正确应用AND。

e.g。

String filterQuery = "FROM Workers WHERE (name='" + name + "'OR last_name='" + last_name + "')AND city='" + city + "'";

否则,你有一个"浮动"或者,可能会对您的期望有所不同。

仍然存在更改查询形式的问题,具体取决于您提供的三个可选查询参数中的多少,但给出了3种可能的输入,这些输入只有7种可能的情况。

答案 3 :(得分:0)

添加括号(在name =之前和AND city之前的右括号)

答案 4 :(得分:0)

如果未指定条件,则需要省略条件的逻辑。这是通过指定参数具有输入的值或为null来完成的。如果您的参数是空字符串而不是空字符,则可以将@param IS NULL切换为@param = ''

SELECT 
  ...
FROM workers
WHERE
    ( name      = @param  OR @param  IS NULL )
AND ( last_name = @param2 OR @param2 IS NULL )
AND ( city      = @param3 OR @param3 IS NULL )

只需将上面脚本中的@param占位符替换为输入值并存储即可。

我会注意SQL注入,因为您将输入值直接放入可能执行的字符串中。在直接在数据库中执行查询之前,请查看查询参数化和准备语句。

答案 5 :(得分:0)

只需使用如下所示的括号即可。这应该有所帮助。

String filterQuery =“FROM Workers WHERE(name ='”+ name +“')OR(last_name ='”+ last_name +“'AND city ='”+ city +“)'”;

答案 6 :(得分:0)

select * from Workers 
where 
(name=@name or @name='') and 
(last_name=@last_name or @last_name='') and
(city=@city or @city='')

回答是MSSQL格式。我希望你能把它格式化为c#。如果有任何帮助,请告诉我