2
respostas

Junção de tabelas com valores únicos

Estou tentando separar de uma tabela duas colunas e mantê-las com valores únicos, pois lá na frente vou utiliza-los como sistema de filtro. Como estou fazendo:

CREATE TABLE [TABELA_VALORES_UNICOS](
    [PK_NUMERO_BEM] [VARCHAR] (5) NOT NULL PRIMARY KEY,
    [DESCRICAO_NOMINAL_BEM] [VARCHAR] (100) NULL,
)

Depois de criar a tabela onde irei colocar os valores eu começo a por esse valores dentro dela, assim.

INSERT INTO TABELA_VALORES_UNICOS
(PK_NUMERO_BEM)
SELECT DISTINCT
([NUMERO_BENS])
FROM [TABELA_DE_VALORES_GERAL] [D_BENS_DESCRICAO]

Dessa forma eu consigo colocar todos os valores da minha PK na tabela nova de forma a não repetir os valores. Agora vou colocar na coluna DESCRICAO_NOMINAL_BEM os valores que representam a PK. Aqui que está o engasgo, eu não estou conseguindo colocar esses valores de forma única, da erro.

INSERT INTO  TABELA_VALORES_UNICOS
SELECT DISTINCT ([DESCRICAO_NOMINAL_BEM])
FROM [TABELA_DE_VALORES_GERAL]
WHERE [TABELA_DE_VALORES_GERAL].NUMERO_BENS = [TABELA_VALORES_UNICOS].[PK_NUMERO_BEM]

Já tentei com INNER JOIN, mas também está dando erro. como faço para para juntar os valores da coluna de DESCRICAO_NOMINAL_BEM na minha nova coluna em uma tabela nova?

2 respostas

Boa noite Antonio, tudo bem?

Nesse caso ao inves de tentar inserir novos registros com a [DESCRICAO_NOMINAL_BEM] você não gostaria de atualizar os registros anteriormente inseridos?

Se sim, no caso você teria que realizar um UPDATE ao invés de um INSERT. E no caso ficaria mais ou menos assim:

 UPDATE [TABELA_VALORES_UNICOS] VU
    SET [DESCRICAO_NOMINAL_BEM] = VG.[DESCRICAO_NOMINAL_BEM]
   FROM [TABELA_DE_VALORES_GERAL] VG
  WHERE VG.[NUMERO_BENS] = VU.[PK_NUMERO_BEM]

Note que estou chamando [TABELA_VALORES_UNICOS] de VU e [TABELA_DE_VALORES_GERAL] de VG.

A sintaxe acima pode não funcionar corretamente dependendo do SGBD que você esteja utilizando. Diante disso, segue outra forma de resolver o problema:

 UPDATE [TABELA_VALORES_UNICOS] VU
    SET [DESCRICAO_NOMINAL_BEM] = (
                            SELECT DISTINCT VG.[DESCRICAO_NOMINAL_BEM] 
                              FROM [TABELA_DE_VALORES_GERAL] VG
                             WHERE VG.[NUMERO_BENS] = VU.[PK_NUMERO_BEM]
            );

Espero ter colaborado na resolução de sua dúvida.

Atenciosamente,

Estou usando o SGBD da Microsoft. Eu consegui de outra forma, ainda usando o INSERT, mas vou guardar essa do UPDATE.

INSERT INTO TABELA_VALORES_UNICOS (PK_NUMERO_BEM, DESCRICAO_NOMINAL_BEM)
SELECT [NUMERO_BEM], [DESCRICAO_NOMINAL_BEM]
FROM [bem_candidato_2016_BRASIL] [DESCRICAO_NOMINAL_BEM]
GROUP BY TABELA_DE_VALORES_GERAL, DESCRICAO_NOMINAL_BEM
ORDER BY PK_NUMERO_BEM ASC