Usuário com melhor resposta
Dados inconsistente no Inner join

Pergunta
-
importei uma tabela do Excel que possui 2746 registro
no intuito de normalizar o dados fiz um insert dentro de uma tabela tbl_n_material
insert into tbl_N_MATERIAL (id_n_mat,desc_n_mat_pt)
select c.NM,c.[NORMA MATERIAL] from [dbo].[CONEXÕES$] as C--Agrupei os registros para inserção me retornou 49 registro.
group by c.NM,c.[NORMA MATERIAL]para verificar estou usando essa query
SELECT c.NM,c.[NORMA MATERIAL] FROM [dbo].[CONEXÕES$] as c
INNER JOIN tbl_N_MATERIAL AS nm ON c.[NORMA MATERIAL]=nm.desc_n_mat_pt
Porem quando a query e executada esta me retornando 2742 registro
problema é quando vou inserindo mais tabelas no join esse numero vai aumentado estes registro
o intuito e gerar a mesma quantidades de registro que possui na [dbo].[CONEXÕES$]
Respostas
-
Pode ser que existam 2 linhas na tabela tbl_N_MATERIAL com a coluna desc_n_mat_pt igual a 'ASTM A403 GR WP316L'.
Ou que existam 2 linhas em uma das outras tabelas relacionadas (Inner Join) para essa linha da tabela CONEXÕES$.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Robert Sancts quarta-feira, 18 de maio de 2016 19:50
Todas as Respostas
-
-
Boa tarde,
Robert, o agrupamento no Insert está sendo feito por 2 colunas, então acredito que você vai obter o mesmo número de linhas no retorno da query se utilizar essas 2 colunas no Inner Join:
SELECT c.NM,c.[NORMA MATERIAL] FROM [dbo].[CONEXÕES$] as c INNER JOIN tbl_N_MATERIAL AS nm ON c.NM = nm.id_n_mat and c.[NORMA MATERIAL] = nm.desc_n_mat_pt
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
este é o select da tabela gerada pelo import do excel
SELECT
[GR]
,[GRUPO],[FM]
,[FAMILIA]
,[SB]
,[SUBFAMILIA],[TP]
,[TIPO]
,[TYPE],[NM]
,[NORMA MATERIAL]
,[STANDARD MATERIAL],[ND]
,[NORMA DIMENSIONAL]
,[DIMENSIONAL STANDARD],[DIM]
,[DIMENSÃO]
,[DIMENSION],[SC]
,[SCH/CLASSE]
,[SCH/CLASSE1],[EX]
,[COSTURA/EXTREMIDADE]
,[ENDS],[IN]
,[REVEST#/TRATAMENTO/ANÁLISE E INSPEÇÕES]
,[F27]/* Ate a aqui normalizei os registos cada grupo separado por espaço foi normalizado*/
,[CÓDIGO DGT]--este nunca se repete
,[YFPR/YRES]
,[YRAW]
,[PETROBRÁS N76]
,[DR ENG]
,[MARCA]
,[ID]--PK
FROM [dbo].[CONEXÕES$]neste select o registro totais chega a quase dobrar a ideia e fazer mais um insert usando este select dentro de uma
tbl_dgt que vai receber [CÓDIGO DGT] e as PK dos Join das tabelas abaixo
SELECT c.ID,c.[CÓDIGO DGT]
FROM [dbo].[CONEXÕES$] as c
inner join [dbo].[tbl_GRUPO]as gr on gr.id_gr = c.GR
inner join [dbo].[tbl_FAMILIA] as fm on fm.id_f=c.FM
inner join [dbo].[tbl_SUBFAMILIA] as sb on sb.iD_sf =c.SB
inner join [dbo].[tbl_TIPO] as tp on tp.desc_tipo_pt= c.TIPO
inner join [dbo].[tbl_N_MATERIAL]as nm on nm.id_n_mat=c.NM
inner join [dbo].[tbl_N_DIMENCIONAL] as nd on nd.id_n_dimen=c.ND
inner join [dbo].[tbl_DIMENSIONAL]as di on di.id_dim =c.DIM
inner join [dbo].[tbl_SCH] as sc on sc.id_sc = c.SC
inner join [dbo].[tbl_EXTREMIDADE] as ex on ex.des_ext_pt=c.[COSTURA/EXTREMIDADE]
inner join [dbo].[tbl_INSPENSOES] as ins on ins.id_insp =c.[IN]
-
Boa tarde,
Robert, o agrupamento no Insert está sendo feito por 2 colunas, então acredito que você vai obter o mesmo número de linhas no retorno da query se utilizar essas 2 colunas no Inner Join:
SELECT c.NM,c.[NORMA MATERIAL] FROM [dbo].[CONEXÕES$] as c INNER JOIN tbl_N_MATERIAL AS nm ON c.NM = nm.id_n_mat and c.[NORMA MATERIAL] = nm.desc_n_mat_pt
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
Cada tabela possui quantas linhas atualmente?
E quantas linhas a query que sugeri retornou?
Assinatura: http://www.imoveisemexposicao.com.br
-
a imagem acima é uma filtragem de um dos dados que estão se repetindo
select[ID],[CÓDIGO DGT] ,[GR],[FM],[SB],[TP],[TIPO],[NM],[NORMA MATERIAL],[ND],[NORMA DIMENSIONAL],[DIM],[DIMENSÃO],[SC],[SCH/CLASSE],[EX],[COSTURA/EXTREMIDADE],[IN],[REVEST#/TRATAMENTO/ANÁLISE E INSPEÇÕES]from CONEXÕES$
where[CÓDIGO DGT] ='MTTKVEZECCY000BKID'
SELECT c.ID,c.[CÓDIGO DGT],
[id_gr],
[id_f],
[iD_sf],
[id_tp],[desc_tipo_pt],
[id_n_mat],[desc_n_mat_pt],
[id_n_dimen],[desc_n_dim_pt],
[id_dim],[des_dim_pt],
[id_sc],[des_sch_pt],
[id_ext],[des_ext_pt],
[id_insp],[des_ins_pt]
FROM [dbo].[CONEXÕES$] as c
inner join [dbo].[tbl_GRUPO]as gr on c.GR = gr.id_gr
inner join [dbo].[tbl_FAMILIA] as fm on c.FM = fm.id_f
inner join [dbo].[tbl_SUBFAMILIA] as sb on c.SB =sb.iD_sf
inner join [dbo].[tbl_TIPO] as tp on c.TIPO = tp.desc_tipo_pt
inner join [dbo].[tbl_N_MATERIAL] as nm on c.[NORMA MATERIAL]=nm.desc_n_mat_pt
inner join [dbo].[tbl_N_DIMENCIONAL] as nd on nd.id_n_dimen=c.ND
inner join [dbo].[tbl_DIMENSIONAL]as di on di.id_dim =c.DIM
inner join [dbo].[tbl_SCH] as sc on sc.id_sc = c.SC
inner join [dbo].[tbl_EXTREMIDADE] as ex on ex.des_ext_pt=c.[COSTURA/EXTREMIDADE]
inner join [dbo].[tbl_INSPENSOES] as ins on ins.id_insp =c.[IN]
where c.[CÓDIGO DGT]='MTTKVEZECCY000BKID'
--group by c.ID,c.[CÓDIGO DGT] having count(*)>=1
order by c.ID -
Pode ser que existam 2 linhas na tabela tbl_N_MATERIAL com a coluna desc_n_mat_pt igual a 'ASTM A403 GR WP316L'.
Ou que existam 2 linhas em uma das outras tabelas relacionadas (Inner Join) para essa linha da tabela CONEXÕES$.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Robert Sancts quarta-feira, 18 de maio de 2016 19:50
-
Robert,
Concordo com o Gapimex, normalmente esse tipo de cenário é muito comum de acontecer, e tenha sempre em mente quando por acaso o resultado de um select com junção de dados apresentar um retorno totalmente inesperado, é um grande indicador que as junções realizadas estão forçando o Database Engine existente no SQL Server a trazer uma massa de dados que não reflete a realidade, neste caso, sua junção esta incorreta.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Pode ser que existam 2 linhas na tabela tbl_N_MATERIAL com a coluna desc_n_mat_pt igual a 'ASTM A403 GR WP316L'.
Ou que existam 2 linhas em uma das outras tabelas relacionadas (Inner Join) para essa linha da tabela CONEXÕES$.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
Bom dia, irei revisar os dados da planilha pois foi me dito que seria ter dados repetidos porque os campos tem que ser únicos para formar um [CÓDIGO DGT] único, bom vou dar uma olhada melhor.
-
Robert,
Concordo com o Gapimex, normalmente esse tipo de cenário é muito comum de acontecer, e tenha sempre em mente quando por acaso o resultado de um select com junção de dados apresentar um retorno totalmente inesperado, é um grande indicador que as junções realizadas estão forçando o Database Engine existente no SQL Server a trazer uma massa de dados que não reflete a realidade, neste caso, sua junção esta incorreta.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
Bom dia J. Galvão, mesmos que o Gapimex esteja correto se na minha tabela tbl_n_material tenha duas descrições semelhantes. pois realizei uma query para verificar a tabela que foi importada
select [ID], [CÓDIGO DGT], count(*) , [GR], [FM], [SB], [TP], [TIPO], [NM], [NORMA MATERIAL], [ND],
[NORMA DIMENSIONAL], [DIM], [DIMENSÃO], [SC], [SCH/CLASSE], [EX], [COSTURA/EXTREMIDADE], [IN], [REVEST#/TRATAMENTO/ANÁLISE E INSPEÇÕES] from CONEXÕES$
group by
[ID], [CÓDIGO DGT], [GR], [FM], [SB], [TP], [TIPO], [NM], [NORMA MATERIAL], [ND], [NORMA DIMENSIONAL], [DIM], [DIMENSÃO], [SC], [SCH/CLASSE], [EX], [COSTURA/EXTREMIDADE], [IN], [REVEST#/TRATAMENTO/ANÁLISE E INSPEÇÕES]
having count(*)>=1
a unica diferença é que este campo ao ser importado ficou sendo do tipo float pois na planilha havia ela é formada por números e letras, porem corrigi este dados ao importa-los para a tbl_n_material.
pq a ideia não é select [CÓDIGO DGT], desc_n_mat_pt.[tbl_n_material] onde [NORMA MATERIAL] for igual desc_n_mat_pt.tbl_n_material ?
-
Pode ser que existam 2 linhas na tabela tbl_N_MATERIAL com a coluna desc_n_mat_pt igual a 'ASTM A403 GR WP316L'.
Ou que existam 2 linhas em uma das outras tabelas relacionadas (Inner Join) para essa linha da tabela CONEXÕES$.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado Robert Sancts quarta-feira, 18 de maio de 2016 19:53