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.
 

Leer las respuestas

#1 Manuel
06/02/2004 - 09:31 | Informe spam
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.



Preguntas similares