Sql 在同一个表中有两个字段的数据库查询。Don';不要考虑任何值是否为空。
问题是我有一个4列的表。我有两个搜索框 田地Sql 在同一个表中有两个字段的数据库查询。Don';不要考虑任何值是否为空。,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,问题是我有一个4列的表。我有两个搜索框 田地 FName LName Age School 文本框 FName School 如果用户插入了两个值,我希望使用这两个值获得相交。如果只有一个值存在,我希望有使用该值的数据。我想不在应用程序中处理这个问题,而是使用存储过程。 我考虑在存储过程中使用IF-ELSE或进行子查询。但不是固溶体。我需要一些指导来想出一个可能的方法。先谢谢你 这是我试过的。这正是我需要将其嵌入到存储过程中的查询 SELECT * FROM STUDENT WHERE FN
FName
LName
Age
School
文本框
FName
School
如果用户插入了两个值,我希望使用这两个值获得相交。如果只有一个值存在,我希望有使用该值的数据。我想不在应用程序中处理这个问题,而是使用存储过程。
我考虑在存储过程中使用IF-ELSE或进行子查询。但不是固溶体。我需要一些指导来想出一个可能的方法。先谢谢你
这是我试过的。这正是我需要将其嵌入到存储过程中的查询
SELECT * FROM STUDENT WHERE FNname like '%TestFName%'
INTERSECT SELECT * FROM STUDENT WHERE School LIKE '%TestSchool';
如果“TestSchool”变为null,则会获取第一个查询中的所有记录
如果两个值都丢失,则返回整个表
如果两个值都存在,它将返回特定的数据元组。以下是我针对自己的问题得出的答案
SELECT *
FROM YourTable
WHERE (FName = @Fname OR @Fname = '')
AND (School = @School OR @School ='')
SELECT * FROM STUDENT WHERE FNname like '%TestFName%'
INTERSECT SELECT * FROM STUDENT WHERE School LIKE '%TestSchool';
在这里,如果“TestFName”变为null,它将获取第二个查询中的所有记录
如果“TestSchool”变为null,则会获取第一个查询中的所有记录
如果两个值都丢失,则返回整个表
如果两个值都存在,则返回特定的数据元组
SELECT *
FROM YourTable
WHERE (FName = @Fname OR @Fname = '')
AND (School = @School OR @School ='')
谢谢。如果有比这更好的方法,请告诉我们。很确定它就这么简单
SELECT *
FROM STUDENT
WHERE FNname like '%TestFName%'
AND School LIKE '%TestSchool%';
如果使用“AND”而不是“OR”,则它满足所有给定条件您可以使用:
SELECT * FROM STUDENT WHERE isnull(FNname, '') like '%' + isnull(@FNname, '') + '%'
and isnull(School, '') like '%' + isnull(@School, '') + '%'
在您的存储过程中使用参数
@FNname
和@School
,并在其中使用上述查询。首先,MySQL还是SQL Server?哪一个?第二,您尝试了什么?为什么要在此处使用INTERSECT?您的老师是否要求您必须使用该关键字?还有……哪些DBMS?答案不一样。我的问题是r SQL Server。但我想知道两者的解决方案。我已经更新了我的问题。不。我不知道其他方法。请指导我,如果有你看到下面的答案,来自Juan Carlos Oropeza???如果你想要这些行中的任何一个都是正确的,只需将AND更改为OR。首先,前导通配符对性能非常有害rmance。如果可能的话,你应该避免这一点。其次,当你只需要一个查询时,你正在运行两个查询。是的,我认为这些是问题。因为它是一个搜索框,而不是UI中的下拉列表,所以我需要通配符。是的,如果有办法避免这两个查询,那么最好是Ry Sean回答,你只需要一个查询。我的查询是在你发布之前的类似的例子包括:(我们知道领先的Wildard非常糟糕,但是像“%TestFName%”这样的fName或TestFName='
会比像“%TestFName%”这样的fName表现得更好。
?可能差不多。第一个谓词会破坏性能。要检查的谓词“”不会影响性能。它不满足此条件”如果两个值都存在,则返回特定的数据元组。"更改或
的和
您有一些非常具体的要求,但没有很好地发布您期望的输出。有几个人对未知的表结构和未知的期望输出给出了可能的答案。如果您需要详细的帮助,您需要提供这些表结构的详细信息,sample数据,根据示例数据给定一组参数所需的输出。我认为您理解错误。可以为null的是参数,而不是dbI上的字段。我不这样认为。通常,两列都可能包含null
,在这种情况下,如果@School
为空,则他需要此列的所有记录,如果我们不要使用isnull(学校,”)
,NULL
记录将被排除。