TransWikia.com

problema al hacer una consulta usando inner join

Stack Overflow en español Asked on December 20, 2021

tengo un problema al hacer una consulta usando inner join, cuando hago la consulta , los registros se multiplican por el numero de registros en la tabla.
Tablas

CREATE TABLE [dbo].[Informes_tecnicos](
    [id_Articulo] [int] ,
    [id_informes] [varchar](10) NOT NULL,
    [centro_publicacion] [varchar](100) NOT NULL,
    [mes_publicacion] [char](2) NOT NULL,
    [ano_publicacion] [char](4) NOT NULL,
    [descripcion] varchar (50) not null
)
CREATE TABLE [dbo].[Articulos](
    [id_articulos] [int] IDENTITY(1,1) NOT NULL,
    [Titulo] [varchar](100) NOT NULL,
    [Autor] [varchar](50) NOT NULL,
    [palabras_claves] [varchar](100) NOT NULL,
    [correo_elec] [varchar](100) NOT NULL,
    localizacion varchar (30) not null,
    [tipo] [varchar](30) Not NULL,
    [copia] [char](1) NOT NULL
)
create procedure [dbo].[ConsultarInformes]
as 
begin
select  Informes_tecnicos.id_informes, Informes_tecnicos.centro_publicacion, Informes_tecnicos.mes_publicacion, Informes_tecnicos.ano_publicacion,
         Articulos.Titulo, Articulos.tipo, Informes_tecnicos.descripcion
       FROM Articulos INNER JOIN Informes_tecnicos
       ON Articulos.tipo = Informes_tecnicos.descripcion;
END

Esa tabla solo tiene 3 registro.

Resultado

introducir la descripción de la imagen aquí

3 Answers

Intenta con esto

create procedure [dbo].[ConsultarInformes]
as 
begin
select  Informes_tecnicos.id_informes, Informes_tecnicos.centro_publicacion, Informes_tecnicos.mes_publicacion, Informes_tecnicos.ano_publicacion,
         Articulos.Titulo, Articulos.tipo, Informes_tecnicos.descripcion
       FROM Articulos INNER JOIN Informes_tecnicos
       ON Articulos.id_articulos = Informes_tecnicos.id_Articulo;
END

Answered by angel solano on December 20, 2021

Trata usando distinct en el select de tu procedimiento

select distinct Informes_tecnicos.id_informes, Informes_tecnicos.centro_publicacion, Informes_tecnicos.mes_publicacion, Informes_tecnicos.ano_publicacion,
         Articulos.Titulo, Articulos.tipo, Informes_tecnicos.descripcion
       FROM Articulos INNER JOIN Informes_tecnicos
       ON Articulos.tipo = Informes_tecnicos.descripcion;
END

Aunque lo ideal seria como comenta @Erick Zarate es que compares por id Articulos.id = Informes_tecnicos.id así solo selecciona aquellos artículos que estén ligados a un Informe técnico, suponiendo que puedas crear artículos pero que aun no sepas a que informe técnico pertenece, en ese caso no habría relación una tabla con la otra
Y es recomendable que utilices llaves primarias y foráneas para que la relación sea mas clara entre las tablas.

Answered by user50672 on December 20, 2021

Debes comparar los ID's osea el campo que no se repite. por lo que entiendo de tu código id_Articulo es un FK (Clave foranea), asi que quedaría así.

select  Informes_tecnicos.id_informes, Informes_tecnicos.centro_publicacion, Informes_tecnicos.mes_publicacion, Informes_tecnicos.ano_publicacion,
     Articulos.Titulo, Articulos.tipo, Informes_tecnicos.descripcion
   FROM Articulos INNER JOIN Informes_tecnicos
   ON Articulos.id_Articulo = Informes_tecnicos.id_articulos;

Answered by Gabriel Jeremy Rodriguez River on December 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP