Una facilita sobre consultas...

03/09/2003 - 14:31 por Daniel Rodriguez | Informe spam
Hola a todos!!

Antes de nada, muchas gracias por el interes que demostrais...

Bueno, esta es una facilita sobre la mejor forma de obtener los datos
deseados... os cuento.

Tengo una tabla Envio y otra ReferenciasEnvios

La de Envio simplemente consta de un campo IdMaterial (son enteros para
identificar diferentes objetos)
Por ejemplo,
IdMaterial

10
20
30


La de referencias envios en definitiva es asi:

IdRefEnvio IdMaterial
1 10
1 20
1 30
2 10
2 20
2 30
2 40
2 50
2 60
3 10
3 20


Lo que quiero es saber cual es la forma más rápida para saber si existe
algun IdRefEnvio que contenga el material de la Tabla Envio.

En este caso, obtener el IdRefEnvio 1, que tiene los IdMaterial contenidos
en la tabla Envio, ni más material, ni menos material... el mismo.

Como veis, el envio IdRefEnvio 2 tambien contiene el material 10,20 y 30,
pero como tiene más material (el 40,50 y 60) , no me sirve...
Con el IdRefEnvio3 pasa lo mismo, tiene el material 10 y 20, pero como no
tiene el 30 no lo necesito.

En definitiva, si en la tabla de referencias existe un envio con el mismo
material que hay en Envio, necesito su IdRefEnvio.

La tabla envios puede tener un gran numero de registros, por lo que
necesitaria la forma mas rápida de obtener el IdRefEnvio...

Espero haberme explicado bien

Y seguramente es muy simple, pero la unica forma que veo es realizar varias
comprobaciones para obtenerlo y no se si estará bien hecho
(en cuanto a velocidad... y esas cosas)

Espero sus sugerencias.
Un saludo a todos,

Daniel R.
 

Leer las respuestas

#1 Liliana Sorrentino
03/09/2003 - 15:55 | Informe spam
Hola Daniel,
A ver cómo va esto, aparentemente funciona bien, y además asumo que tenés
índices sobre ambas tablas.
Saludos... Liliana.

SELECT IdRefEnvio
FROM (SELECT IdRefEnvio, RIdMaterial = R.IdMaterial, EIdMaterial E.IdMaterial
FROM #Envio E
FULL JOIN #ReferenciasEnvios R ON E.IdMaterial = R.IdMaterial) Derivada
GROUP BY IdRefEnvio
HAVING COUNT(*) = (SELECT COUNT(*) FROM #Envio)

"Daniel Rodriguez" escribió en el mensaje
news:
Hola a todos!!

Antes de nada, muchas gracias por el interes que demostrais...

Bueno, esta es una facilita sobre la mejor forma de obtener los datos
deseados... os cuento.

Tengo una tabla Envio y otra ReferenciasEnvios

La de Envio simplemente consta de un campo IdMaterial (son enteros para
identificar diferentes objetos)
Por ejemplo,
IdMaterial

10
20
30


La de referencias envios en definitiva es asi:

IdRefEnvio IdMaterial
1 10
1 20
1 30
2 10
2 20
2 30
2 40
2 50
2 60
3 10
3 20


Lo que quiero es saber cual es la forma más rápida para saber si existe
algun IdRefEnvio que contenga el material de la Tabla Envio.

En este caso, obtener el IdRefEnvio 1, que tiene los IdMaterial contenidos
en la tabla Envio, ni más material, ni menos material... el mismo.

Como veis, el envio IdRefEnvio 2 tambien contiene el material 10,20 y 30,
pero como tiene más material (el 40,50 y 60) , no me sirve...
Con el IdRefEnvio3 pasa lo mismo, tiene el material 10 y 20, pero como no
tiene el 30 no lo necesito.

En definitiva, si en la tabla de referencias existe un envio con el mismo
material que hay en Envio, necesito su IdRefEnvio.

La tabla envios puede tener un gran numero de registros, por lo que
necesitaria la forma mas rápida de obtener el IdRefEnvio...

Espero haberme explicado bien

Y seguramente es muy simple, pero la unica forma que veo es realizar


varias
comprobaciones para obtenerlo y no se si estará bien hecho
(en cuanto a velocidad... y esas cosas)

Espero sus sugerencias.
Un saludo a todos,

Daniel R.


Preguntas similares