2013-12-24 5 views
4

У меня есть таблица, как показано ниже
SQL запрос, чтобы получить общие записи

ID Username GroupID 
1 venkat  2 
2 venkat  3 
3 ramu  1 
4 ramu  2 

Использование оператора SQL Я хочу, чтобы получить все имя пользователя о том, что доступны в обоих groupids 2,3

В этом случае только Venkat это имя пользователя, которое доступно как в GroupID 2 и 3

Пожалуйста, помогите мне

ответ

9

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

SELECT userName 
FROM tableA 
WHERE groupId IN (2, 3) 
GROUP BY userName 
HAVING COUNT(DISTINCT groupId) = 2; 

Проверить SQL FIDDLE DEMO

ВЫВОД

| USERNAME | 
|----------| 
| venkat | 
+3

Он вернет неправильный ответ. – Amit

+1

Что делать, если пользователь присутствует дважды для одного и того же идентификатора группы (например, пользователь Pat присутствует дважды для идентификатора группы 2) - угадайте, что данный запрос не работает, тогда – Scorpion

+1

@AmitAgrawal В каком случае он вернет неправильный ответ? –

6

Альтернативный подход с использованием простой JOIN;

SELECT DISTINCT t1.username 
FROM MyTable t1 JOIN MyTable t2 
    ON t1.username = t2.username AND t1.groupid=2 AND t2.groupid=3; 

An SQLfiddle to test with.

+0

его намного более чистый и лучший подход +1 –

+0

Что делать, если у меня есть несколько групп, например 1,2,3,4,5,.10 .. вы можете помочь мне дать очень гибкий запрос – Tarak

+0

@Tarak Для этого вам нужно использовать я присоединяюсь к таблице многопрофильными временами. Значит, если у вас 5 групп, чем 5 раз. –

Смежные вопросы