19/11/2008, 13:16
|
| | | Fecha de Ingreso: enero-2008 Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años Puntos: 260 | |
Respuesta: Ayuda con dos Selects en una sola tabla. Hola,
No tengo ni idea, nunca había leído el error ... El identificador formado por varias partes $var no se pudo enlazar.
(Posiblemente porque siempre lo uso en inglés. )
Y no pude reproducir el error, porque la instrucción me funciona correctamente.
Código:
select productos.codigo, productos.descripcion, familia.descripcion, fabricante.descripcion, precios.precio, precios.fecha
from precios, productos
inner join familia on productos.codfam = familia.codfam
inner join fabricante on productos.codfab = fabricante.codfab
where productos.codigo = precios.codigo
go
Aunque sería preferible que uses solamente 'joins' en favor de 'from tab1, tab2 where' o por lo menos solamente uno de los dos.
Código:
select a.codigo, a.descripcion, d.descripcion, e.descripcion, b.precio, b.fecha
from productos a
left join precios b on a.codigo = b.codigo
left join
(
select codigo, oferta, max(fecha) as ultima_fecha
from precios
group by codigo, oferta
) c on b.codigo = c.codigo and b.oferta = c.oferta
left join familia d on a.codfam = d.codfam
left join fabricante e on a.codfab = e.codfab
where b.fecha = c.ultima_fecha and b.oferta = 1
order by a.codigo
go
Sería muy útil y de mucha cortesía que escribieras un script para reproducir 'exactamente' el problema.
Saludos,
Código:
-- MSSSQLServer 2000
create database test
go
use test
go
create table productos (codigo char(5) primary key, descripcion varchar(80), codfam char(5), codfab char(5))
create table precios (codigo char(5), oferta bit, fecha smalldatetime, precio money)
create table familia (codfam char(5) primary key, descripcion varchar(80))
create table fabricante (codfab char(5) primary key, descripcion varchar(80))
go
insert into familia (codfam, descripcion) values ( 'FM1', 'Descripcion Familia FM1')
insert into fabricante (codfab, descripcion) values ( 'FB1', 'Descricion Fabricante FB1')
insert into productos (codigo, descripcion, codfam, codfab) values ( 'A1', 'Descripcion Producto A1', 'FM1', 'FB1')
insert into productos (codigo, descripcion, codfam, codfab) values ( 'A2', 'Descripcion Producto A2', 'FM1', 'FB1')
insert into precios (codigo, oferta, fecha, precio) values ( 'A2', 1, '20080103', 2999)
insert into precios (codigo, oferta, fecha, precio) values ( 'A2', 1, '20080101', 3000)
insert into precios (codigo, oferta, fecha, precio) values ( 'A1', 1, '20080102', 2000)
insert into precios (codigo, oferta, fecha, precio) values ( 'A1', 1, '20080101', 1999)
go
-- SELECT productos.nombre, productos.descripcion, familia.descripcion, fabricantes.descripcion, precios.precio, precios.fecha
-- FROM precios, productos
-- INNER JOIN familia ON productos.codfam = familia.codfam
-- INNER JOIN fabricante ON productos.codfab = fabricantes.codfab
-- WHERE productos.codprod = precios.codprod
select productos.codigo, productos.descripcion, familia.descripcion, fabricante.descripcion, precios.precio, precios.fecha
from precios, productos
inner join familia on productos.codfam = familia.codfam
inner join fabricante on productos.codfab = fabricante.codfab
where productos.codigo = precios.codigo
go
select a.codigo, a.descripcion, d.descripcion, e.descripcion, b.precio, b.fecha
from productos a
left join precios b on a.codigo = b.codigo
left join
(
select codigo, oferta, max(fecha) as ultima_fecha
from precios
group by codigo, oferta
) c on b.codigo = c.codigo and b.oferta = c.oferta
left join familia d on a.codfam = d.codfam
left join fabricante e on a.codfab = e.codfab
where b.fecha = c.ultima_fecha and b.oferta = 1
order by a.codigo
go
select * from productos
select * from precios
select * from familia
select * from fabricante
go
delete from productos
delete from precios
delete from familia
delete from fabricante
go
use master
drop database test
go
Este texto está de colores ... en SQL Server :-) |