Problema con subconsulta

Hola! De antemano agradezco su ayuda.
Tengo un problema con una consulta que me esta volviendo loco. Manejo 2 tablas... Una tabla de pagos (maestro) y un otra de descripción de pagos (detalle), en la cual se describen todos conceptos que se realizaron en 'X' pago; obviamente existe un campo de uno a muchos entre el maestro y el detalle.
El problema es que por un problema de redondeo, mi tabla de detalle en ocaciones arroja un centavo de diferencia contra el maestro, pero los datos que se han guardado mal deben ser corregidos. Intente hacer una sub consulta para verificar cuales registros tiene problemas, tengo el siguiente Query
SELECT pk_maestro_pago, numero_recibo, importe_neto as MAESTRO, (SELECT SUM(importe_neto) FROM detalle_pago WHERE fk_maestro_pago=pk_maestro_pago) as DETALLE
FROM maestro_pago
WHERE maestro_pago.importe_neto<>DETALLE
La única forma en la que pude obtener el resultado, fue copiando la subconsulta a la condición WHERE, pero el rendimiento no es muy óptimo... Ya que hace 2 veces la misma busqueda; al verificar 800 mil registros... Se alentá. ¿Es posible utilizar ese resultado para incluirlo en la clausula WHERE? ¿Existe otra forma de hacer esto?
Muchas gracias por su atención y espero que la explicación sea clara.

1 Respuesta

Respuesta
1
Efectivamente el rendimiento de esa consulta no es bueno por la forma como lo estas planteando, prueba esta solución y espero te sirva, cualquier cosa adicional me comentas.
SELECT     pk_maestro_pago,
    numero_recibo,
    importe_neto as MAESTRO,
    SUM(detalle_pago.importe_neto)  as DETALLE
FROM maestro_pago inner join detalle_pago on fk_maestro_pago=pk_maestro_pago
group by pk_maestro_pago,
    numero_recibo,
    importe_neto
having maestro_pago.importe_neto<>SUM(detalle_pago.importe_neto)
Muchas gracias por tu comentario!
Lo menos que uno espera al preguntar es que te expliquen a detalle la solución, así que gracias por el tiempo que empleste. Me sacó de un problema. Es una buenísima solución.
Que tengas un excelente día!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas