В рамках работы по изучению спроса в интернет-магазине, поставили нетривиальную задачу.
Не пинайте сильно, задача такая, что объяснить даже трудно, голову сломал, и всё же...
Есть большая таблица соответствий между идентификаторами [id1] int not null и [id2] int not null.
На основе этой таблицы была создана таблица уникальных пар [id1] и [id2]
Идентификатор [id1] может соответствовать нескольким идентификаторам [id2], образуя некую группу :
1000 - 11037
1000 - 22371
1000 - 1037
1000 - 8779
Как получить список идентификаторов [id1], такие что соответствующая кажому из них группа из [id2] соответстуют только исходному [id1] либо члену группы, но НЕ ВЫХОДИТ из группы?
Например, вот это будет искомое
11037 - 1000
22371 - 1000
1037 - 1000
8779 - 1000
22371 - 1037
11037 - 8779
А вот это - уже нет
11037 - 1000
22371 - 1000
1037 - 1000
8779 - 1000
22371 - 1037
11037 - 8779
22371 - 2000 - выходит из группы
Не пинайте сильно, задача такая, что объяснить даже трудно, голову сломал, и всё же...
Есть большая таблица соответствий между идентификаторами [id1] int not null и [id2] int not null.
На основе этой таблицы была создана таблица уникальных пар [id1] и [id2]
select distinct [id1],[id2] into #Pairs from ( select distinct [id1],[id2] from [BigTable] union select [id2],[id1] from [BigTable] ) A
Идентификатор [id1] может соответствовать нескольким идентификаторам [id2], образуя некую группу :
1000 - 11037
1000 - 22371
1000 - 1037
1000 - 8779
Как получить список идентификаторов [id1], такие что соответствующая кажому из них группа из [id2] соответстуют только исходному [id1] либо члену группы, но НЕ ВЫХОДИТ из группы?
Например, вот это будет искомое
11037 - 1000
22371 - 1000
1037 - 1000
8779 - 1000
22371 - 1037
11037 - 8779
А вот это - уже нет
11037 - 1000
22371 - 1000
1037 - 1000
8779 - 1000
22371 - 1037
11037 - 8779
22371 - 2000 - выходит из группы