Select rebelde.

04/02/2004 - 16:29 por Jose Antonio | Informe spam
Hola, tengo tres tablas, en la primera estan los clientes, en la segunda los
pedidos de estos clientes y en la tercera las lineas de estos pedidos.

Necesito saber con un select, los clientes cuyos pedidos incluyan lineas con
unos productos determinados.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4

2 2 P1
P3

3 3 P1
P2

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.

El resultado seria El cliente 1 y el Cliente 2.


Saludos y Gracias.

Preguntas similare

Leer las respuestas

#1 Mariano Alvarez \(MUG\)
04/02/2004 - 16:33 | Informe spam
Podria ser algo asi

select distinct
clientes.nombre
from
clientes
inner join pedidos ON ( "aca va el join entre clientes y pedidos" )
inner join lineas ON ("aca va el join entre lineas y pedidos")
where
lineas.producto in( producto1, ...ProductoN)


Tambien puedes usar EXISTS


select clientes.nombre
from
clientes
where exists
(
select pedidos.cliente
from pedidos
inner join lineas ON ("aca va el join entre lineas y pedidos")
where
lineas.producto in( producto1, ...ProductoN)
AND ( "aca va el join entre clientes y pedidos" )
)




Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Jose Antonio" wrote in message
news:
Hola, tengo tres tablas, en la primera estan los clientes, en la segunda


los
pedidos de estos clientes y en la tercera las lineas de estos pedidos.

Necesito saber con un select, los clientes cuyos pedidos incluyan lineas


con
unos productos determinados.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4

2 2 P1
P3

3 3 P1
P2

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.

El resultado seria El cliente 1 y el Cliente 2.


Saludos y Gracias.


Respuesta Responder a este mensaje
#2 Manuel
04/02/2004 - 16:42 | Informe spam
/*Codigo sin probar*/

SELECT NombreCliente
FROM cliente
WHERE idcliente
IN (SELECT DISTINCT idcliente FROM pedidos WHERE idpedido
IN (SELECT DISTINCT idpedido FROM lineapedido WHERE producto in
('p1', 'p3')))

Espero que te sirva.

Saludos.



"Jose Antonio" escribió en el mensaje
news:
Hola, tengo tres tablas, en la primera estan los clientes, en la segunda


los
pedidos de estos clientes y en la tercera las lineas de estos pedidos.

Necesito saber con un select, los clientes cuyos pedidos incluyan lineas


con
unos productos determinados.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4

2 2 P1
P3

3 3 P1
P2

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.

El resultado seria El cliente 1 y el Cliente 2.


Saludos y Gracias.


Respuesta Responder a este mensaje
#3 José Raúl Fenollar Martínez
04/02/2004 - 16:43 | Informe spam
select clientes.codigo,clientes.nombre
from clientes inner join pedidos
on clientes.codigoCliente=pedidos.CodigoCliente inner
join LineasdePedidos

on pedidos.CodigodePedido= LineasdePedidos.CodigoDePedido
where LineasDePedido.Producto in('P1','P3')


"Jose Antonio" escribió en el mensaje
news:
Hola, tengo tres tablas, en la primera estan los clientes, en la segunda


los
pedidos de estos clientes y en la tercera las lineas de estos pedidos.

Necesito saber con un select, los clientes cuyos pedidos incluyan lineas


con
unos productos determinados.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4

2 2 P1
P3

3 3 P1
P2

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.

El resultado seria El cliente 1 y el Cliente 2.


Saludos y Gracias.


Respuesta Responder a este mensaje
#4 Jose Antonio
04/02/2004 - 17:41 | Informe spam
Con esa solucion, me salen los tres clientes, por que todos tienen o el 'P1'
o el 'P3', yo necesito que solo me salgan
los que tienen el 'P1' y ademas el 'P3', ambos a la vez.

Alguna sugerencia?.

"Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió en
el mensaje news:
Podria ser algo asi

select distinct
clientes.nombre
from
clientes
inner join pedidos ON ( "aca va el join entre clientes y pedidos" )
inner join lineas ON ("aca va el join entre lineas y pedidos")
where
lineas.producto in( producto1, ...ProductoN)


Tambien puedes usar EXISTS


select clientes.nombre
from
clientes
where exists
(
select pedidos.cliente
from pedidos
inner join lineas ON ("aca va el join entre lineas y pedidos")
where
lineas.producto in( producto1, ...ProductoN)
AND ( "aca va el join entre clientes y pedidos" )
)




Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Jose Antonio" wrote in message
news:
> Hola, tengo tres tablas, en la primera estan los clientes, en la segunda
los
> pedidos de estos clientes y en la tercera las lineas de estos pedidos.
>
> Necesito saber con un select, los clientes cuyos pedidos incluyan lineas
con
> unos productos determinados.
>
> Ejemplo:
>
> Clientes Pedidos Lineas de Pedidos
> 1 1 P1
> P2
> P3
> P4
>
> 2 2 P1
> P3
>
> 3 3 P1
> P2
>
> En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3.
>
> El resultado seria El cliente 1 y el Cliente 2.
>
>
> Saludos y Gracias.
>
>


Respuesta Responder a este mensaje
#5 Mariano Alvarez \(MUG\)
04/02/2004 - 17:53 | Informe spam
Suponiendo que no se repita el mismo producto en un pedido


select distinct
clientes.nombre
from
clientes
inner join pedidos ON clientes.IDCliente = pedidos.IDCliente
inner join
(
Select
lineas.IDPedido,
count(*) cantidad -- esto no seria necesario pero para claridad lo
puse
from
lineas
where
lineas.IDProducto in (p1,p2) -- aca van los productos
group by
lineas.IDPedido
having count (*) = 2 -- Aca va la cantida de productos
) LineasDerivada
ON pedidos.IDPedido = LineasDerivada.IDPedido




Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"Jose Antonio" wrote in message
news:
Con esa solucion, me salen los tres clientes, por que todos tienen o el


'P1'
o el 'P3', yo necesito que solo me salgan
los que tienen el 'P1' y ademas el 'P3', ambos a la vez.

Alguna sugerencia?.

"Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió en
el mensaje news:
> Podria ser algo asi
>
> select distinct
> clientes.nombre
> from
> clientes
> inner join pedidos ON ( "aca va el join entre clientes y pedidos" )
> inner join lineas ON ("aca va el join entre lineas y pedidos")
> where
> lineas.producto in( producto1, ...ProductoN)
>
>
> Tambien puedes usar EXISTS
>
>
> select clientes.nombre
> from
> clientes
> where exists
> (
> select pedidos.cliente
> from pedidos
> inner join lineas ON ("aca va el join entre lineas y pedidos")
> where
> lineas.producto in( producto1, ...ProductoN)
> AND ( "aca va el join entre clientes y pedidos" )
> )
>
>
>
>
> Jose Mariano Alvarez
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
> "Jose Antonio" wrote in message
> news:
> > Hola, tengo tres tablas, en la primera estan los clientes, en la


segunda
> los
> > pedidos de estos clientes y en la tercera las lineas de estos pedidos.
> >
> > Necesito saber con un select, los clientes cuyos pedidos incluyan


lineas
> con
> > unos productos determinados.
> >
> > Ejemplo:
> >
> > Clientes Pedidos Lineas de Pedidos
> > 1 1 P1
> > P2
> > P3
> > P4
> >
> > 2 2 P1
> > P3
> >
> > 3 3 P1
> > P2
> >
> > En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y


P3.
> >
> > El resultado seria El cliente 1 y el Cliente 2.
> >
> >
> > Saludos y Gracias.
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida