数据库查询与同一个表中的两个字段。不要考虑是否有任何值为空

时间:2017-11-03 13:35:36

标签: sql sql-server tsql stored-procedures

问题是我有一个包含4列的表。我有两个搜索框。

字段

FName
LName
Age
School

文字框

FName
School

如果用户插入了两个值,我想使用这两个值来获取交叉。如果只存在一个值,我希望使用该值获取数据。我想过在应用程序中没有处理它,而是使用存储过程。 我想过在存储过程中使用IF ELSE或者有子查询。但不是一个可靠的解决方案我需要一些指导来思考一种可能的方法。提前谢谢。

这是我尝试过的。这只是我需要将其嵌入到存储过程中的查询

SELECT * FROM STUDENT WHERE FNname like '%TestFName%' 
INTERSECT SELECT * FROM STUDENT WHERE School LIKE '%TestSchool';

如果'TestSchool'变为空,则会获取完整填充第一个查询的所有记录。

如果两个值都缺失,则返回整个表格。

如果两个值都存在,则返回特定的数据元组。

4 个答案:

答案 0 :(得分:2)

很确定它就像这一样简单。

SELECT * 
FROM STUDENT 
WHERE FNname like '%TestFName%'
    AND School LIKE '%TestSchool%';

如果使用' AND'而不是' OR'它符合所有给定的条件

答案 1 :(得分:1)

 SELECT *
 FROM YourTable
 WHERE (FName = @Fname OR @Fname = '') 
   AND (School = @School OR @School ='')

答案 2 :(得分:0)

以下是我为自己的问题提出的答案。

SELECT * FROM STUDENT WHERE FNname like '%TestFName%' 
INTERSECT SELECT * FROM STUDENT WHERE School LIKE '%TestSchool';

在这里,如果'TestFName'变为null,它将获取完全填充第二个查询的所有记录。

如果'TestSchool'变为空,则会获取完整填充第一个查询的所有记录。

如果两个值都缺失,则返回整个表格。

如果两个值都存在,则返回特定的数据元组。

谢谢。如果有比这更好的方法,请启发我们。

答案 3 :(得分:0)

您可以使用:

SELECT * FROM STUDENT WHERE isnull(FNname, '') like '%' + isnull(@FNname, '') + '%' 
and isnull(School, '') like '%' + isnull(@School, '') + '%'

在存储过程中使用参数@FNname@School,并在其中使用上述查询。