1

我想从特定部分和其他搜索条件中获取学生列表。我正在这样做:-

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 条件,它可以正常工作,但我必须得到包含整个搜索条件的列表。有人帮我吗?

4

2 回答 2

0

问题是 LIKE 操作数。If @nameis'a'这只会返回名字是'a'or的学生'A'。如果您希望学生姓名以“a”开头,则必须添加通配符“%”

FirstName LIKE 'a%'

(某些 SQL 方言如 MS Access 使用通配符“*”而不是“%”。)

注意区分大小写/不区分大小写的搜索。根据 SQL 方言和用于列的排序规则,搜索是否区分大小写。如果您不想进行区分大小写的搜索(即您想查找姓名以“a”或“A”开头的学生),您可以这样做:

UPPER(FirstName) LIKE 'A%'

或者在 SQL-Server 上

FirstName COLLATE UTF8_GENERAL_CI LIKE '%a'

其中 CI 表示不区分大小写。

于 2012-12-07T12:57:37.287 回答
0
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

像这样的东西应该工作。您只需要学习如何使用内部连接。

于 2012-12-07T12:48:26.950 回答