Select dificil parami.

05/02/2004 - 22:42 por Jose Antonio | Informe spam
Hola a todos, me estoy liando con las consultas de sql y cada dia me surgen
problemas que no puedo resolver.
Ayer me resolvisteis uno y hoy tengo otro.

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 y puedan exluirse dependiendo de si tienen otro
producto o no.

Ejemplo:

Clientes Pedidos Lineas de Pedidos
1 1 P1
P2
P3
P4
P5

2 2 P1
P3
P5

3 3 P1
P2
P3
P5

En este caso. ¿Que clientes tienen en sus pedidos los productos P1 y P3 pero
excluyendo a los que ademas tien el P2.

El resultado seria El cliente 2, ya que aunque el 1 y el 3 cumplen la
condicion deben ser excluidos porque tambien tienen el P2.

Haber si me podeis ayudar.


Saludos y Gracias.

Preguntas similare

Leer las respuestas

#6 Jose Mariano Alvarez \(MUG\)
10/02/2004 - 05:08 | Informe spam
En general el Exists correlacionado es mejor que un IN pero no es una regla.


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

"jch" wrote in message
news:
Consulto no seria mas eficiente en vez del not in .. un EXISts????
entiendo que ello es un poco mas complejo de comprender porque
inviertes la consulta pero a la vez es mucho mas eficiente.-
Slds.

"Jose Antonio" wrote in message


news:...
> Gracias por las ideas, lo que pasa es que los valores que se incluyen


deben
> estar todos , no alguno de ellos.
>
> Mas ideas?
>
>
> "Manuel" escribió en el mensaje
> news:
> > Hola,
> > he recreado tu situación... espero que te sirva...
> >
> >
> > CREATE TABLE cliente (idcliente int)
> > CREATE TABLE pedido (idpedido int ,codigocliente int)
> > CREATE TABLE [linea_p] (producto varchar(10),codigopedido int)
> >
> > INSERT INTO cliente VALUES (1)
> > INSERT INTO cliente VALUES (2)
> > INSERT INTO cliente VALUES (3)
> >
> > INSERT INTO pedido VALUES (1, 1)
> > INSERT INTO pedido VALUES (2, 2)
> > INSERT INTO pedido VALUES (3, 3)
> >
> > INSERT INTO linea_p VALUES ('p1', 1)
> > INSERT INTO linea_p VALUES ('p2', 1)
> > INSERT INTO linea_p VALUES ('p3', 1)
> > INSERT INTO linea_p VALUES ('p4', 1)
> > INSERT INTO linea_p VALUES ('p5', 1)
> > INSERT INTO linea_p VALUES ('p1', 2)
> > INSERT INTO linea_p VALUES ('p3', 2)
> > INSERT INTO linea_p VALUES ('p5', 2)
> > INSERT INTO linea_p VALUES ('p1', 3)
> > INSERT INTO linea_p VALUES ('p2', 3)
> > INSERT INTO linea_p VALUES ('p3', 3)
> > INSERT INTO linea_p VALUES ('p5', 3)
> >
> > select distinct idcliente
> > from cliente, pedido, linea_p
> > where idcliente = codigocliente
> > and idpedido = codigopedido
> > and producto in ('p1','p3')
> > and idcliente not in
> > (select distinct idcliente
> > from cliente, pedido, linea_p
> > where idcliente = codigocliente
> > and idpedido = codigopedido
> > and producto in ('p2')
> > )
> >
> >
> > Saludos.
> >
> >
> > "Jose Antonio" escribió en el mensaje
> > news:
> > > Hola a todos, me estoy liando con las consultas de sql y cada dia me
> surgen
> > > problemas que no puedo resolver.
> > > Ayer me resolvisteis uno y hoy tengo otro.
> > >
> > > 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 y puedan exluirse dependiendo de si


tienen
> otro
> > > producto o no.
> > >
> > > Ejemplo:
> > >
> > > Clientes Pedidos Lineas de Pedidos
> > > 1 1 P1
> > >


P2
> > >


P3
> > >


P4
> > >


P5
> > >
> > > 2 2 P1
> > >


P3
> > >


P5
> > >
> > > 3 3 P1
> > >


P2
> > >


P3
> > >


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


P3
> pero
> > > excluyendo a los que ademas tien el P2.
> > >
> > > El resultado seria El cliente 2, ya que aunque el 1 y el 3


cumplen la
> > > condicion deben ser excluidos porque tambien tienen el P2.
> > >
> > > Haber si me podeis ayudar.
> > >
> > >
> > > Saludos y Gracias.
> > >
> > >
> > >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida