Как мне сгенерировать таблицу {(y, z)}, которая состоит из двух других отдельных таблиц {(x, y)} и {(y, z)}.

У меня есть две таблицы с двумя столбцами, RelOne и RelTwo. Строки в каждой таблице представляют упорядоченные пары отношения «многие ко многим».

RelOne это

(a, 1)  
(b, 1)  
(c, 1)  
(a, 2)   
(b, 2)

RelTwo - это

(1, East)  
(1, West)  
(2, East)   
(2, South)  
(2, West)  
(2, North)  

Для каждой таблицы нет естественных ключей.

Я хочу сгенерировать третью таблицу, которая состоит из RelOne и RelTwo, которая будет

(a, East)  
(b, East)  
(c, East)  
(a, West)  
(b, West)  
(c, West)  
(a, East)  
(a, South)   
(a, West)   
(a, North)  
(b, East)   
(b, South)   
(b, West)   
(b, North)

Эти значения являются упрощением; фактические таблицы имеют сотни строк.

1 ответ1

1

На первый взгляд это показалось глупо простым, но ... это не так.

Я думаю, что возможным решением является сокращение перекрестного продукта - если вы посмотрите на счет, RelOne имеет 3 '1' и 2 '2', а RelTwo имеет 2 '1' и 4 '2'; результат имеет 3 * 2 '1' + 2 * 4 '2' = 13 записей. Нет простого способа получить это общее количество, кроме подсчета всех 1, 2, 3 и т.д. В обеих ваших таблицах, очевидно, утомительно.
Поэтому (и я пропущу все решения Macro/VBA/3rdParty), я рекомендую следующий подход:

  1. Рассмотрим перекрестный продукт между таблицами - объедините каждую запись RelOne с каждой записью RelTwo. это даст вам N * M строк (здесь: 5 * 6 = 30).
  2. Поместите формулу в каждый из этих перекрестных продуктов, которая проверяет, совпадают ли ключи
  3. Вы получите длинную таблицу с N * M строками и второй столбец, содержащий TRUE или FALSE в зависимости от того, совпадают ли ключи
  4. Сортируйте и отбрасывайте все ЛОЖЬ.

Для практического выполнения поместите формулы в N * M строк и используйте ROW()%N и INT(ROW()/N) чтобы сгенерировать индексы в две таблицы - эти две будут повторяться во всех N * M комбинациях. Все остальное должно быть простым, если вы понимаете, что я описываю, и знаете свой путь с формулами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .