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
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP