我想从特定部分和其他搜索条件获取学生列表。我正在这样做:-
declare @sectionId int, @name varchar
select @sectionId=23
select @name='a'
select UserId, FirstName from StudentMaster
Where FirstName Like @name and UserId IN
(
select UserId from StudentMaster
Intersect
select StudentId from StudentInSections where SectionId=@sectionId
)
但它没有给出正确的答案。如果我只写Userid条件,它可以正常工作,但我必须获得具有整个搜索条件的列表。有人可以帮助我吗?
问题是 LIKE 操作数。如果@name
'a'
则只会返回姓名为 'a'
或 'A'
的学生。如果您希望学生姓名以"a"开头,则必须添加通配符"%"
FirstName LIKE 'a%'
(某些 SQL 方言(如 MS Access)使用通配符"*"而不是"%"。
有关区分大小写/不区分大小写搜索的说明。根据 SQL 方言和用于列的排序规则,搜索将区分大小写或不区分大小写。如果您不想进行区分大小写的搜索(即您想查找姓名以"a"或"A"开头的学生),您可以这样做:
UPPER(FirstName) LIKE 'A%'
或在 SQL 服务器上
FirstName COLLATE UTF8_GENERAL_CI LIKE '%a'
其中 CI 表示不区分大小写。
select sm.UserId, sm.FirstName from StudentMaster sm
inner join StudentInSections ss on ss.StudentId = sm.UserId
Where sm.FirstName Like @name
and ss.SectionId = @sectionId
这样的事情应该有效。您只需要学习如何使用内部联接。