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

Откуда:
Сообщений: 325
Есть такая конфигурация таблиц:
create table pri (aaa int, bbb nvarchar(100));
create table sec (aaa int, ccc int);

insert pri values (1, 'one'), (2, 'second'), (3, 'third'), (4, 'fourth'), (5, 'fifth'), (6, 'sixth');
insert sec values (1, 123), (1, 234), (1, 345), (2, 123), (2, 234), (3, 123), (3, 345), (4, 368), (6, 123), (6, 234), (6, 345), (6, 890);


Таблицы связаны по полю aaa.

У приложения есть список значений поля ccc, нужно получить список строк из pri, для которых в sec.bbb есть хотя бы одно из значений списка. Приложение формирует запрос, куда подставляет список значений (например, список из значений 123, 234, 345):
select * from pri
where exists (select * from sec where sec.aaa = pri.aaa and ccc in (123, 234, 345))

Здесь все довольно просто.

Еще нужно получить список строк из pri, для которых в sec.bbb есть все значения списка. Здесь не могу придумать компактную форму для такого запроса. Желательно такого запроса, куда можно подставить значения в виде списка (123, 234, 345).

Примеры запросов, которые выдают то, что нужно, но они достаточно громоздкие:
declare @values table (ccc int)
insert @values values (123), (234), (345)

select * from pri
where not exists (select * from @values v left join sec on sec.ccc = v.ccc and sec.aaa = pri.aaa where sec.aaa is null)


select * from pri
where exists (select * from sec where sec.aaa = pri.aaa and ccc = 123)
  and exists (select * from sec where sec.aaa = pri.aaa and ccc = 234)
  and exists (select * from sec where sec.aaa = pri.aaa and ccc = 345)


Возможно ли как-нибудь попроще сформулировать такой запрос?
28 май 15, 21:36    [17704031]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгенерировать запрос  [new]
iap
Member

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

поиск по фразе "реляционное деление".
В том числе в Google и на нашем форуме.
28 май 15, 21:56    [17704113]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить