Como gerar composição de duas tabelas

0

Como posso gerar uma tabela {(y, z)} que seja uma composição de duas outras tabelas separadas {(x, y)} e {(y, z)}.

Eu tenho duas tabelas de 2 colunas, RelOne e RelTwo. As linhas em cada tabela representam pares ordenados de um relacionamento muitos para muitos.

RelOne é

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

RelTwo é

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

Não há chaves naturais para nenhuma das tabelas.

Eu quero gerar uma terceira tabela que é a composição de RelOne e RelTwo que seria

(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)

Estes valores são uma simplificação; as tabelas reais têm centenas de linhas.

    
por user1704475 05.06.2017 / 21:42

1 resposta

1

À primeira vista, isso pareceu bobo simples, mas ... não é.

Eu acho que uma possível solução é um produto cruzado reduzido - se você olhar para as contagens, RelOne tem 3 '1' e 2 '2', e RelTwo tem 2 '1' e 4 '2'; o resultado tem 3 * 2 '1' + 2 * 4 '2' = 13 entradas. Não há uma maneira simples de produzir essa contagem total, exceto a contagem de todos os 1, 2, 3, etc em ambas as suas tabelas, obviamente tediosa.
Portanto (e vou pular todas as soluções Macro / VBA / 3rdParty), eu recomendo a seguinte abordagem:

  1. Considere um produto cruzado entre as tabelas - combine cada entrada da RelOne com cada entrada de RelTwo. que lhe dará linhas N * M (aqui: 5 * 6 = 30).
  2. Coloque uma fórmula em cada um desses produtos cruzados que verifique se as chaves correspondem
  3. Você obterá uma tabela longa com N * M linhas e uma segunda coluna que contenha VERDADEIRO ou FALSO, dependendo se as chaves corresponderem
  4. Classifique e descarte tudo FALSE.

Para a execução prática, coloque as fórmulas nas linhas N * M e use ROW()%N e INT(ROW()/N) para gerar os índices nas duas tabelas - essas duas serão iteradas em todas as combinações N * M. O resto deve ser direto se você entender o que eu descrevo, e você conhece o seu caminho com fórmulas.

    
por 06.06.2017 / 03:02