SQL - Seleccionar los subproductos de otra tabla?

 
Vista:

Seleccionar los subproductos de otra tabla?

Publicado por Cris_81 (1 intervención) el 27/03/2007 16:43:01
Hola a todos!!

Necesito q me echeis una manilla, porfi!!

El tema es el siguiente, yo tengo dos tablas, una de producto y otra de subproducto.
PRODUCTO ( codigoproducto, descripcionproducto, .... )
SUBPRODUCTO (codigoproducto, codigosubproducto,.... )

necesito sacar de q se compone cada producto, pero lo q me lia es lo siguiente,
muchos de los subproductos tambien se componen a su vez de otros subproductos, no se si me explico, por ejemplo:

PRODUCTO1 (esta compuesto de:)
PRODUCTO11
PRODUCTO12 (esta compuesto de:)
PRODUCTO121 (esta compuesto de:)
PRODUCTO1211
PRODUCTO122
PRODUCTO13

con lo q las tablas kedarian mas o menos de esta forma:
PRODUCTO ( codigoproducto, descripcionproducto, .... )
PRODUCTO1 descripcion
PRODUCTO11 descripcion
PRODUCTO12 descripcion
PRODUCTO121 descripcion
PRODUCTO1211 descripcion
PRODUCTO122 descripcion
PRODUCTO13 descripcion

SUBPRODUCTO (codigoproducto, codigosubproducto,.... )
PRODUCTO1 PRODUCTO11
PRODUCTO1 PRODUCTO12
PRODUCTO1 PRODUCTO13
PRODUCTO12 PRODUCTO121
PRODUCTO121 PRODUCTO1211

gracias por adelantado,
un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Seleccionar los subproductos de otra tabla?

Publicado por luishoracio (33 intervenciones) el 27/03/2007 20:02:38
Buenas tardes,

Esta a tu disposición mi e-mail para que si quieres te ayudo a resolver tu problema

Hasta pronto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Seleccionar los subproductos de otra tabla?

Publicado por Isaías (5072 intervenciones) el 27/03/2007 21:24:01
Hola Cris

Lo que tu requieres resolver es la RECURSIVIDAD, registros, que se apuntan a si mismos.

Bueno, te paso todo un script donde se plantea una solucion, espero que te sirva:

create function dbo.nombres (
@id int
)
returns varchar(8000)
as
begin
declare @s varchar(8000)
declare @i int

set @s = ''
set @i = @id

while exists(select * from dbo.t1 where [id] = @i)
begin
select @i = IdPadre, @s = nombre + case when @s = '' then '' else ' / ' end
+ @s
from dbo.t1
where [id] = @i
end

return @s
end
go

create function dbo.ids (
@id int
)
returns @t table ([id] int)
as
begin
declare @i int

set @i = @id

while exists(select * from dbo.t1 where [id] = @i)
begin
insert into @t values(@i)

select @i = IdPadre
from dbo.t1
where [id] = @i
end

return
end
go

create table dbo.t1 (
[id] int,
IdPadre int,
nombre varchar(25),
)
go

insert into dbo.t1 values(1, 0, 'AAA')
insert into dbo.t1 values(2, 0, 'BBB')
insert into dbo.t1 values(3, 1, 'AAA 1')
insert into dbo.t1 values(4, 1, 'AAA 2')
insert into dbo.t1 values(5, 3, 'AAA 1.1')
insert into dbo.t1 values(6, 3, 'AAA 1.2')
insert into dbo.t1 values(7, 6, 'AAA 1.2.1')
go

select [id], IdPadre, nombre, dbo.nombres([id]) as nombres
from dbo.t1
where [id] in (select [id] from dbo.ids(5))
order by [id]
go

drop table dbo.t1
go

drop function dbo.nombres, dbo.ids
go

Esta solucion tiene una gran limitacion en SQL Server 2000, pues el maximo
varchar es 8000.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar