2016-07-10 2 views
-2

У меня есть таблица, подобная этой, и мне нужен результат только для UserId 11, потому что UserId 12 не имеет значения 10, но все равно получает результат.T-SQL: аналогичный идентификатор в том же столбце

SELECT * 
FROM LessonList 
WHERE 
    (LessonId = 102 and LessonValue = 1002) 
    or 
    (LessonId = 103 and LessonValue = 1003) 
    or 
    (LessonId = 102 and LessonValue = 1008) 

Выходные:

Id  UserId  LessonId  LessonValue 
1  11   102   1002 
2  11   103   1003 
3  12   102   1008 

мне нужен результат:

Id  UserId  LessonId  LessonValue 
1  11   102   1002 
2  11   103   1003 

Благодаря

ответ

2

Вы можете использовать агрегирование для этого:

SELECT userid 
FROM LessonList 
WHERE (LessonId = 102 and LessonValue IN (1002, 1008)) or 
     (LessonId = 103 and LessonValue = 1003) 
GROUP BY userid 
HAVING COUNT(DISTINCT LessonId) = 2; 

Это вернет пользователей, у которых есть два идентификатора урока. Из-за предложения WHERE это означает, что они имеют как 102, так и 103. IN просто упрощает логику запросов.

0
SELECT * 
FROM LessonList 
WHERE 
    (LessonId = 102 and LessonValue = 1002) 
    or 
    (LessonId = 103 and LessonValue = 1003) 
    and lessonvalue<>1008 
Смежные вопросы