SQL-запрос: поиск уникальных числовых комбинаций во всех записях - PullRequest
4 голосов
/ 19 декабря 2011

Я пытаюсь создать запрос в SQL Server, который будет искать все комбинации чисел в таблице.

КОМБИНАЦИОННЫЙ СТОЛ

CombID     Comb_Num1     Comb_NumTwo     Comb_NumThree
   1           1              2                3
   2           2              10               15
   3           5              20               60
   4           10             22               50
   5           22             33               46           

Числа варьируются от 1 до 60, и один и тот же номер не повторяется в комбинации. Заказ не имеет значения.

Входной стол

EntryID     NumberOne     NumberTwo     NumberThree     NumberFour     NumberFive
   1            10           22             33              46              50
   2            2            10             15              22              40
   3            24           33             40              45              50
   4            5            10             22              40              60
   5            2            6              10              22              40
   6            2            10             22              50              60
   7            10           22             33              46              50

Числа варьируются от 1 до 60, и один и тот же номер не повторяется в записи. Заказ не имеет значения.

Результаты

  • Поиск комбинации 1 не даст результатов
  • Поиск комбинации 2 вернет EntryID 2
  • Поиск комбинации 3 не даст результатов
  • Поиск комбинации 4 вернет EntryID 1, 6, 7
  • Поиск комбинации 5 вернет EntryID 1, 7

Запрос должен также показывать для каждой записи в таблице комбинаций, сколько раз он появлялся в таблице записей. Следует исключить комбинации, которые не отображаются в таблице Entry.

Ответы [ 2 ]

6 голосов
/ 19 декабря 2011

Попробуйте:

select distinct e.EntryID
from entry e, combination c
where c.Comb_Num1 in (e.NumberOne, e.NumberTwo, e.NumberThree, e.NumberFour, e.NumberFive)
and   c.Comb_Num2 in (e.NumberOne, e.NumberTwo, e.NumberThree, e.NumberFour, e.NumberFive)
and   c.Comb_Num3 in (e.NumberOne, e.NumberTwo, e.NumberThree, e.NumberFour, e.NumberFive)
and   c.CombID = @CombID

- вернуть соответствующие записи для определенного @ CombID

0 голосов
/ 19 декабря 2011

Грубая сила будет делать это:

SELECT EntryID
FROM combinations
INNER JOIN entries ON
  (Comb_Num1=NumberOne AND Comb_NumTwo=NumberTwo AND Comb_NumThree=NumberThree)
  OR (Comb_Num1=NumberTwo AND Comb_NumTwo=NumberThree AND Comb_NumThree=NumberFour)
  OR (Comb_Num1=NumberThree AND Comb_NumTwo=NumberFour AND Comb_NumThree=NumberFive)
WHERE CombID=<whatever>

этот курс принимает во внимание порядок, который вы не хотите.Чтобы это исправить, либо вы создаете другую таблицу (одноразовое создание), которая имеет одинаковый CombID для всех перестановок Comb_Num1, CombNumTwo и CombNumThree), либо вы расширяете условие безумного соединения тем же способом.Это оставлено читателю в качестве упражнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...