Eu tenho uma tabela que possui mapeamentos provenientes de fontes diferentes (uma linha para cada fonte) para três tipos de identificadores diferentes (idtype1 a idtype3), com idtype1 tendo a prioridade mais alta e idtype3 a mais baixa. Preciso mesclar e consolidar todos os mapeamentos relacionados, para poder ter uma visão melhor das relações entre eles.
A tabela inicial de mapeamentos se parece com:
idtype1 | idtype2 | idtype3 |
---|---|---|
nulo | b | c |
nulo | nulo | c |
nulo | b | d |
um | nulo | d |
nulo | b | nulo |
x | b | nulo |
Agora, como todos os tipos de id estão de alguma forma ligados entre si, ou seja, c ligado a b que está ligado a d , que está novamente ligado a a , agora, como x está relacionado a b , todos estão essencialmente ligados entre si. Devo ser capaz de consolidar as informações no resultado abaixo:
idtype1 | idtype2 | idtype3 |
---|---|---|
um | b | c |
um | b | d |
x | b | c |
x | b | d |
Exemplo 2:
idtype1 | idtype2 | idtype3 |
---|---|---|
nulo | nulo | c |
nulo | b | c |
nulo | nulo | d |
um | nulo | d |
nulo | b | d |
nulo | nulo | e |
nulo | b | e |
nulo | b | nulo |
Eu deveria consolidar isso em:
idtype1 | idtype2 | idtype3 |
---|---|---|
um | b | c |
um | b | d |
um | b | e |
Alguém pode ajudar a criar uma lógica eficiente para isso?
EDITAR:
A tabela pode ter múltiplas combinações, ou seja, ambos os exemplos podem estar presentes ao mesmo tempo com valores diferentes.
CREATE TABLE mappings (idtype1 VARCHAR(10),idtype2 VARCHAR(10),idtype3 VARCHAR(10))
INSERT mappings
VALUES
(null,null,'c'),
(null,'b','c'),
(null,null,'d'),
('a',null,'d'),
(null,'b','d'),
(null,null,'e'),
(null,'b','e'),
(null,'b',null),
(null,'q','r'),
(null,null,'r'),
(null,'q','s'),
('p',null,'s'),
(null,'q',null),
('t','q',null)
A saída deve ser:
idtype1 | idtype2 | idtype3 |
---|---|---|
um | b | c |
um | b | d |
x | b | c |
x | b | d |
p | q | R |
p | q | é |
p | q | t |