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

Откуда: Чебаркуль
Сообщений: 3673
Есть таблица, надо по указанному ид ридера найти других, с таким же набором данных как и у исходного
Упрощенно так: дан ридер=4, надо найти 4 и 5.
Количество записей не всегда 3, определяется исходным ид, в данном примере=4

Как запросом выбрать читателей с таким же набором как и исходный?

declare @t table
(
reader int not null,
book int,
pages int
)
insert into @t (reader, book,pages)
select 1, 1,100
union
select 1, 2,201
union
select 1, 3,301
union
select 2, 1,100
union
select 2, 3,101
union
select 2, 3,301
union 
select 3, 1,100
union
select 3, 2,101
union
select 3, 3,301
union
select 4, 1,100
union
select 4, 2,201
union
select 4, 3,301
union
select 5, 1,100
union
select 5, 2,201
union
select 5, 3,301

select * from @t
14 ноя 19, 15:38    [22016372]     Ответить | Цитировать Сообщить модератору
 Re: Найти одинаковые подмножества  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3673
едит: дан ридер=4, надо найти 1 и 5.
14 ноя 19, 15:38    [22016375]     Ответить | Цитировать Сообщить модератору
 Re: Найти одинаковые подмножества  [new]
msLex
Member

Откуда:
Сообщений: 7998
Тема обсуждалась на форуме кучу раз.
Ищите "реляционное деление"
14 ноя 19, 15:44    [22016380]     Ответить | Цитировать Сообщить модератору
 Re: Найти одинаковые подмножества  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
msLex
Тема обсуждалась на форуме кучу раз.
Ищите "реляционное деление"
Where all in - где все строки есть в подзапросе
14 ноя 19, 22:32    [22016642]     Ответить | Цитировать Сообщить модератору
 Re: Найти одинаковые подмножества  [new]
aleks222
Member

Откуда:
Сообщений: 923
iap
msLex
Тема обсуждалась на форуме кучу раз.
Ищите "реляционное деление"
Where all in - где все строки есть в подзапросе


Ленивые все стали
declare @reader int;
 set @reader = 4;

with t as ( select * from @t)
   , t1 as ( select * from t where reader = @reader )
   , r as ( select distinct reader from t)
  select * from r
           where exists( select book, pages from t1 intersect select book, pages from t where t.reader = r.reader )
                 and not exists( select book, pages from t1 except select book, pages from t where t.reader = r.reader )
                 and not exists( select book, pages from t where t.reader = r.reader except  select book, pages from t1 )
15 ноя 19, 06:03    [22016708]     Ответить | Цитировать Сообщить модератору
 Re: Найти одинаковые подмножества  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
aleks222
iap
пропущено...
Where all in - где все строки есть в подзапросе


Ленивые все стали
declare @reader int;
 set @reader = 4;

with t as ( select * from @t)
   , t1 as ( select * from t where reader = @reader )
   , r as ( select distinct reader from t)
  select * from r
           where exists( select book, pages from t1 intersect select book, pages from t where t.reader = r.reader )
                 and not exists( select book, pages from t1 except select book, pages from t where t.reader = r.reader )
                 and not exists( select book, pages from t where t.reader = r.reader except  select book, pages from t1 )
А меня-то за шо?!
15 ноя 19, 09:28    [22016769]     Ответить | Цитировать Сообщить модератору
 Re: Найти одинаковые подмножества  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4683
Ролг Хупин,

Соберите наборы данных в некую строку (NVARCHAR(MAX) -- '100-101-301'), вычислите HASH (MD5) от этой строки. Используйте совпадение хешей для поиска одинаковых.
15 ноя 19, 12:20    [22017006]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить