Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите написать запрос  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1121
Добрый день,

Есть таблица, в которой идентификаторы студентов и групп (отношение многие ко многим):
CREATE TABLE [dbo].[student_groups](
group_id int,
student_id int)
Дается список идентификаторов студентов, например:
student_id in (1,2,3,4,5)

Как лучше написать запрос, который покажет все группы, в которых присутствует каждый из этих студентов, то есть группы, где есть все пять вышеперечисленных студентов?

Спасибо.
7 июн 19, 09:43    [21904234]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
Roust_m,

Читать про реляционное деление. Наиболее понятные и простые варианты реализации - на [not]exists подзапросах или на группировке с постфильтрыцией (GROUP BY + HAVING)
7 июн 19, 09:47    [21904237]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
aleks222
Member

Откуда:
Сообщений: 968
Щукина Анна
Roust_m,

Читать про реляционное деление. Наиболее понятные и простые варианты реализации - на [not]exists подзапросах или на группировке с постфильтрыцией (GROUP BY + HAVING)


Зачем?
Пущай 5 intersect напишет и фсе.
7 июн 19, 12:36    [21904417]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
n-ый вопрос за месяц... последние студенты перед призывом :)
7 июн 19, 12:39    [21904420]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 46979
TaPaK
n-ый вопрос за месяц... последние студенты перед призывом :)
В австралийскую армию?
7 июн 19, 13:57    [21904507]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
TaPaK
n-ый вопрос за месяц... последние студенты перед призывом :)
В австралийскую армию?

да, промаз :)
Срочный призыв отменён с 1972 года.[2]
7 июн 19, 13:59    [21904509]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
-- KAB --
Member

Откуда: Москва
Сообщений: 20
Roust_m,

Да чо уж там, всеё группой двоечников выкладывайте всё что вам задали - здесь решат вам всё - энтузиасты )))
7 июн 19, 14:49    [21904580]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Roust_m
Member

Откуда: Сидней
Сообщений: 1121
Почему двоечники? Это просто не моя специализация, иногда приходится делать что-то за пределами обычных обязанностей. Если нет желания отвечать, можно просто пройти мимо, зачем флуд разводить?

Вот что у меня получилось:
select sg.class_name, count(distinct student_id) cnt from student_groups sg inner join class rc on sg.class_id = rc.id where rc.class_group = 1
and student_id in (1, 2, 3, 4, 5)
group by class_name having count(distinct student_id) = 5;


Думаю, что несколько коряво, поэтому решил спросить на форуме.
11 июн 19, 02:36    [21906289]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
aleks222
Member

Откуда:
Сообщений: 968
declare @s table( id int primary key)

insert @s
select 1 union all select 2 union all select 3 union all select 4 union all select 5;


with t as ( select * from [dbo].[student_groups] )
   , x as ( select * from @s )
   , g as ( select distinct t.group_id from t inner join x on t.student_id = x.id )
  select * from g
    where not exists ( select * from x left outer join ( select * from t where t.group_id = g.group_id ) as t on t.student_id = x.id where t.student_id is null )
11 июн 19, 06:02    [21906305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить