SQL Server - Query Extraño

   
Vista:

Query Extraño

Publicado por Alonso Guillèn Porras (5 intervenciones) el 21/05/2010 05:40:54
Señor@s buenas noches

El día de hoy en mi trabajo me solicitaron una información que según pensé no tenia mucha dificultad obtener, sin embargo, me llevé la sorpresa que el query que realicé no me daba los resultados esperados. Si bien busque otra forma de obtener la información, me quedé intrigado del por que no sirvió el primer query.

La idea es extraer todos los deudores que tengan garantías tipo 10 y 11 con tipo de bien 7 y 35, únicamente. Por ejemplo, si un deudor tiene dos garantías, una tipo 10 con tipo bien 35 y la otra tipo 16 con tipo bien 1, este deudor no debería aparecer en los resultados debido a que no tiene únicamente garantías tipo 10 u 11 con tipo de bien 7 o 35.

Agradezco la ayuda que me puedan dar.

El query es el siguiente:

select distinct a.DEUDOR
from GARANTIAS a
where a.MITIGA <> 0 and a.TIPO_GARANTIA in (10,11) and a.tipo_bien in (7,35)
AND a.DEUDOR not IN (select distinct b.DEUDOR
from GARANTIAS b
where b.MITIGA <> 0 and b.TIPO_GARANTIA not in (10,11) and
b.tipo_bien not in (7,35) )
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
Imágen de perfil de Isaias

RE:Query Extraño

Publicado por Isaias (3181 intervenciones) el 21/05/2010 19:43:11
No voy muy de acuerdo con el uso del IN, esto dependera de que tantos registros se esten manejando, pero, mi pregunta es: ¿este simple codigo, no te da el resultado esperado?

select distinct a.DEUDOR
from GARANTIAS a
where a.MITIGA <> 0 and a.TIPO_GARANTIA in (10,11) and a.tipo_bien in (7,35)
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

RE:Query Extraño

Publicado por Alonso Guillen Porras (5 intervenciones) el 21/05/2010 20:28:27
Es correcto amigo, el query no me produce los resultados esperados. Si vemos el query, el select 1 es el contrario del select 2, en teoría de conjuntos podríamos tratarlo como la diferencia de dos conjuntos, el primer conjunto seria el select 1 y el segundo conjunto el select 2, o sea 1-2, todos los registros de 1 que no estén en 2.

Saludos.
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
Imágen de perfil de roger

RE:Query Extraño

Publicado por roger (173 intervenciones) el 21/05/2010 22:57:27
si entiendo bien el problema, lo que tienes es unas posibles combinaciones entre garantias y tipos de bien, esas son las que deberia tener en la condicion

AND (
(a.TIPO_GARANTIA = 10 and a.tipo_bien = 7) OR (a.TIPO_GARANTIA = 10 and a.tipo_bien = 35) OR (a.TIPO_GARANTIA = 11 and a.tipo_bien = 7) OR (a.TIPO_GARANTIA = 11 and a.tipo_bien = 35)
)
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

RE:Query Extraño

Publicado por Alonso Guillén Porras (5 intervenciones) el 22/05/2010 00:10:12
Tampoco funciona así. muchas gracias
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

RE:Query Extraño

Publicado por Tiburoncin (9 intervenciones) el 22/05/2010 00:45:13
select distinct a.DEUDOR
from GARANTIAS a
where a.MITIGA <> 0 and a.TIPO_GARANTIA in (10,11) and a.tipo_bien in (7,35)
AND a.DEUDOR not IN
( select distinct b.DEUDOR
from GARANTIAS b
where
b.MITIGA <> 0 and
not(
b.TIPO_GARANTIA in (10,11) and
b.tipo_bien in (7,35)
)
)
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