sql foreach без использования курсора - PullRequest
1 голос
/ 24 марта 2011

У меня есть таблица "Студент" в SQL со структурой:

   StudentId   FirstName LastName

    1            X         Y

    ....

И таблица языков, ее структура:

  LanguageId   Name
    1          English
    2          Mandarin
    3          Spanish

   .....

и таблица отношений StudentLanguage (языкина котором говорит студент)

  StudentId            LanguageId

    1                    1
    1                    3

    2                    1
    2                    2

со своей страницы asp.net я хочу фильтровать студентов по разговорным языкам с помощью флажков.

например, когда я проверяю английский, Мадарин я хочу иметьучащиеся, говорящие по-английски и на мадарине Когда я проверяю французский, испанский, английский ==> чтобы учащиеся говорили по-французски, и по-английски, и по-испански.

, чтобы сделать это, я передаю таблицу параметров языка под названием @LanguageTable(LanguageId smallint)хранимая процедура.Как я могу использовать эту таблицу, чтобы получить студентов без курсора.

Я пробовал с CTE, но безрезультатно.

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Я не проверял это, но:

SELECT s.StudentId, s.FirstName, s.LastName
FROM Student s
    INNER JOIN StudentLanguage sl ON sl.StudentId = s.StudentId
    INNER JOIN @Language l ON l.LanguageId = sl.LanguageId
GROUP BY s.StudentId, s.FirstName, s.LastName
HAVING Count(*) = (SELECT COUNT(*) FROM @Language)
1 голос
/ 24 марта 2011

Попробуйте это:

select s.StudentId,s.FirstName,s.LastName
from Stundent s
join StudentLanguage sl on s.StudendID=sl.StudentId
join @LanguageTable on sl.LanguageId=@LanguageTable.LanguageId
group by s.StudentId,s.FirstName,s.LastName
having count(*)=(select count(*) from @LanguageTable)
1 голос
/ 24 марта 2011

Вам нужно реляционное деление .

SELECT s.StudentId, s.FirstName, s.LastName
FROM   Student s
WHERE  NOT EXISTS(SELECT *
                  FROM   @LanguageTable l
                  WHERE  NOT EXISTS(SELECT *
                                    FROM   StudentLanguage sl
                                    WHERE  sl.LanguageId = l.LanguageId
                                           AND sl.StudentId = s.StudentId))  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...