none
Dados inconsistente no Inner join RRS feed

  • 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$] 

    terça-feira, 17 de maio de 2016 16:19

Respostas

Todas as Respostas

  • Boa tarde Robert,

    Bem estranho aumentar o numero de linha se voce estiver utilizando Inner Join,

    Poderia postar a query inteira para visualizarmos.


    terça-feira, 17 de maio de 2016 17:50
  • 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

    terça-feira, 17 de maio de 2016 18:18
  • 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]

    terça-feira, 17 de maio de 2016 18:22
  • 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

    ja tentei, mas mesmo assim me traz informações inconsistentes  
    terça-feira, 17 de maio de 2016 18:36
  • Cada tabela possui quantas linhas atualmente?

    E quantas linhas a query que sugeri retornou?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 17 de maio de 2016 18:54
  •             

    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

    terça-feira, 17 de maio de 2016 20:01
  • 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
    terça-feira, 17 de maio de 2016 20:47
  • 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]

    quarta-feira, 18 de maio de 2016 01:01
  • 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.    

    quarta-feira, 18 de maio de 2016 11:21
  • 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 ?

     
    quarta-feira, 18 de maio de 2016 11:38
  • 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

    Depois de uma consulta mais minuciosa  na planilha acabei encontrando divergência, nos campos de descrição .
    quarta-feira, 18 de maio de 2016 19:53