SQL - Consulta Select complicada

 
Vista:

Consulta Select complicada

Publicado por DKL (2 intervenciones) el 14/04/2011 09:06:51
Hola, no llevo mucho tiempo programando con Bases de Datos y con sentencias relativamente sencillas me defiendo, pero ahora me he encontrado con una que no acabo de ver. Explico el problema advirtiendo que NO se puede rediseñar las tablas, tengo que trabajar sobre ellas aunque no veáis lógica cierta información:

Hay una [B]tabla (1)[/B] con la siguiente información:

id num_pesaje estado
------------------------------------------
e1 p1 1
e2 p1 1
e4 p3 0
e5 p4 1


Por otra parte tengo esta [B]tabla (2)[/B] con num_pesaje + linea como clave primaria:

num_pesaje linea producto peso
-------------------------------------------------------------
p1 1 prod1 53
p1 2 prod2 0
p1 3 prod3 21
p2 4 prod4 41

Por último tengo otra[B] tabla (3)[/B] con num_pesaje como clave primaria:

num_pesaje fecha hora
---------------------------------------------------
p1 01/04/11 11:53
p2 02/04/11 09:25
p3 04/04/11 16:37

Lo que quiero es realizar una consulta que me obtenga los [I][U]productos[/U][/I] de la [B]tabla 2[/B] cuyo [I][U]peso[/U][/I] NO sea 0 con la [I][U]fecha [/U][/I]y [U][I]hora [/I][/U]correspondiente al [U][I]num_pesaje [/I][/U]obtenidos de la [B]tabla 3[/B] y por último la condición que no sé como poner, que el [I][U]num_pesaje [/U][/I]salga en la consulta solamente cuando tenga el [I][U]estado [/U][/I]1 en TODAS sus apariciones en la [B]tabla 1[/B]

Espero haberme explicado y que me podáis ayudar pues me urge un poco.

Saludos y gracias!
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta Select complicada

Publicado por Leonardo Josué (1173 intervenciones) el 14/04/2011 22:14:11
Hola DKL... cuál es tu duda??? En tu post nos explicas detalladamente lo que quieres obtener, pero no mencionas algún tipo de problemática, error, pero tampoco nos dices qué es lo que haz intentado hacer. no mencionas qué manejador de BD estás utilizando, y aunque la sintaxis puede ser muy parecida entre todos los manejadores también es cierto que tienen sus diferencias...

La única parte que creo que te podría dar problemas es la condición para la tabla1, donde dices que sólo deben aparecer aquellas en donde todos los estados sean 1... hay varias formas para abordar este problema, utilizando IN, EXISTS, etc. Te dejo un ejemplo de cómo sería en SQL Server utilizando Exists:

declare @Tabla1 table (id varchar(2), num_pesaje varchar(2), estado bit)
insert into @Tabla1 values ('e1', 'p1', 1)
insert into @Tabla1 values ('e2', 'p1', 1)
insert into @Tabla1 values ('e3', 'p2', 0)
insert into @Tabla1 values ('e4', 'p3', 0)
insert into @Tabla1 values ('e5', 'p4', 1)
insert into @Tabla1 values ('e6', 'p1', 1)
insert into @Tabla1 values ('e7', 'p4', 1)
insert into @Tabla1 values ('e8', 'p5', 1)
insert into @Tabla1 values ('e9', 'p5', 0)

select * from @Tabla1

select distinct num_pesaje from @Tabla1 T1 where not exists (
select * from @Tabla1 T2 where T1.num_pesaje = T2.num_pesaje and T2.estado = 0)

El resultado de la consulta sería
num_pesaje
-----------------------
p1
p4

ya que son los únicos en donde todas sus apariciones tienen un estado = 1.

Intenta resolver el resto de la consulta, y si tienes problemas lo comentas nuevamente en el foro, poniendo algo del código que haz intentado desarrollar.

Saludos
Leo.
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

Consulta Select complicada

Publicado por DKL (2 intervenciones) el 15/04/2011 09:06:51
Muchas gracias, lo he resuelto con el uso de IN :)
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