amigos.. tengo un problema con este prodemiento... miren el codigo:
___________________________________________________________
create proc SpLisDet(@Cod_Fac int)
as begin
select D.IdDetalle ,fac.IdFacultad, C.Nombre
from Carrera C inner join DetalleFacultad D
on D.IdCarrera =C.IdCarrera inner join Facultad fac
on D.IdFacultad=@Cod_Fac
end
--y cuando ejecuto me salen las carreras con el mismo nombre todos
--- y yo quiero q me salga cada registro con el nombre de la carrera a la q pertenecen :s... ayudenme
___________________________________________
Muéstranos las tablas y los registros...
CREATE TABLE Facultad
(
IdFacultad char(3)primary key,
IdUniversidad Int references Universidad,
IdGrupCarrera Int references GrupoCarreras
)
Go
CREATE TABLE Carrera
(
IdCarrera int identity(1,1)primary key, --EJEM: 1 - INGIENERIA DE SISTEMAS
Nombre varchar(30)not null
)
Go
CREATE TABLE DetalleFacultad
(
IdDetalle char(5)primary key,
IdFacultad char(3)references Facultad,
IdCarrera int references Carrera
)
(http://C:%5CUsers%5CLAB02%5CDesktop%5CNueva%20carpeta%5Cg.jpg)
Las consultas Inner JOIN debes usarlas lo menos posible, porque consumen bastantes recursos y son bastante más lentas. Para tu caso debería ser suficiente una consulta multitabla simple. No se si estará bien, pero podría ser algo así:
SELECT D.IdDetalle, Fac.IdFacultad, C.Nombre
FROM Carrera C, DetalleFacultad D, Facultad Fac
WHERE D.IdCarrera = C.IdCarrera AND D.IdFacultad = @Cod_Fac
GROUP BY D.IdDetalle, Fac.IdFacultad, C.Nombre;
Saludos.
no es asi, lo q estas haciendo es hacer un plano cartesiano.... yo quiero q me aparezca el codigo del detalle con el codigo de la faculta y el nombre de la carrera
PERO SOLO DE LA FACULTAS QUE REQUIERO!!!
Cita de: jsf121 en 6 Mayo 2011, 19:31 PM(http://C:%5CUsers%5CLAB02%5CDesktop%5CNueva%20carpeta%5Cg.jpg)
@jsf121, #FAIL! hahahahahaha
--
Pues entonces sólo realiza un
WHERE al final de la consulta, es decir:
SELECT *
FROM Carrera
INNER JOIN DetalleFacultad ON DetalleFacultad.IdCarrera = Carrera.IdCarrera
INNER JOIN Facultad ON Facultad.IdFacultad = DetalleFacultad.IdFacultad
WHERE ( Facultad.IdFacultad = @Cod_Fac )
El problema es como te han puesto antes, has puesto el "filtro" en el ON en lugar del WHERE, además de que poniendo eso en el ON no se esta reflejando realmente la relación de las tablas.
Saludos