Получение записей из двух таблиц с помощью Intersect

Я хочу получить список студентов из определенного раздела и с другими критериями поиска. Я делаю это: -

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, оно работает правильно, но мне нужно получить список со всеми критериями поиска. есть ли кто-нибудь, кто может мне помочь?


person mitali    schedule 07.12.2012    source источник
comment
intersect кажется здесь совершенно лишним. Это должно работать точно так же: ... and UserId IN (select StudentId from StudentInSections where SectionId=@sectionId). Так что ваша проблема, кажется, не имеет ничего общего с intersect.   -  person Andriy M    schedule 07.12.2012


Ответы (2)


Проблема в операнде LIKE. Если @name равно 'a', будут возвращены только учащиеся, чьи имена 'a' или 'A'. Если вы хотите, чтобы имена учеников начинались с «а», вы должны добавить подстановочный знак «%».

FirstName LIKE 'a%'

(Некоторые диалекты SQL, такие как MS Access, используют подстановочный знак «*» вместо «%».)

Примечание о поиске с учетом/нечувствительного к регистру. В зависимости от диалекта SQL и сопоставления, используемого для столбца, поиск будет учитывать регистр или нет. Если вы не хотите выполнять поиск с учетом регистра (т. е. хотите найти учащихся, чье имя начинается с «а» или «А»), вы можете сделать это:

UPPER(FirstName) LIKE 'A%'

Или на SQL-сервере

FirstName COLLATE UTF8_GENERAL_CI LIKE '%a'

Где CI означает нечувствительность к регистру.

person Olivier Jacot-Descombes    schedule 07.12.2012

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

Что-то вроде этого должно работать. Вам просто нужно научиться использовать внутренние соединения.

person Louis Ricci    schedule 07.12.2012