Hola Quim, antes que nada muchas gracias por tu respuesta y tu tiempo.
Si bien el modelo de productos y ordenes lo puse de ejemplo para que se entendiese el problema, es mas complejo que eso.
en realidad no tengo productos, ni ordenes, sino caballos, embarques, liquidaciones, y alguans tablas mas relacionadas..
Gracias a tu ejemplo, entendi como hacer los Selects adentro de un LEFT, porque antes los hacia mal, y no me dejaba relacionar las tablas cuando hacia LEFT JOIN ( Select.. where id = TABLADEAFUERA.id ).. me decia que no existia TABLADEAFUERA, y tenia razon..
En fin, me volvi un poco loco pero lo pude resolver, Tenia que se de esta forma, porque usa la misma query (simplificada) para hacer la paginacion..
En un punto usando el select adentro del LEFT, pero para el otro ya era mucho quilombo porque esta todo agrupado, pero pude usar Having, la query quedo asi:
Código sql:
Ver originalSELECT l.id
, cl.razon_social AS cliente_liquidador
, l.embarque_id
, Date_Format( e.fecha_salida, '%d/%m/%Y' ) AS fecha_salida
, p.nombre AS destino
, COUNT( c.id ) AS cantidad_caballos
, Group_Concat( DISTINCT r.nombre ORDER BY r.nombre Separator ', ' ) AS razas
, SUM( c.valor ) AS valor_caballos
, ( SUM( c.valor ) - ( ( SUM( c.valor ) * 9.0909 ) / 100 ) - l.gastos_total - l.iva_total ) AS total
, pagos.pagado
, ( ( SUM( c.valor ) - ( ( SUM( c.valor ) * 9.0909 ) / 100 ) - l.gastos_total - l.iva_total ) - pagos.pagado ) AS saldo
FROM liquidaciones l
INNER JOIN embarques e
ON e.id = l.embarque_id
INNER JOIN clientes cl
ON cl.id = l.cliente_liquidador_id
INNER JOIN paises p
ON p.id = e.destino_aereo_id
LEFT JOIN ( SELECT ( SUM( importe_total ) - SUM( retencion_ganancia ) ) AS pagado, liquidacion_id FROM liquidaciones_pagos GROUP BY liquidacion_id ) AS pagos
ON pagos.liquidacion_id = l.id
LEFT JOIN liquidaciones_caballos lc
ON lc.liquidador_id = l.id
LEFT JOIN caballos c
ON c.id = lc.caballo_id
LEFT JOIN razas r
ON r.id = c.raza_id
GROUP BY l.id
HAVING saldo > 0 # Con saldo pendiente
# HAVING ( IsNull( saldo ) OR saldo <= 0 ) - Sin saldo pendiente
No me gusta mucho que se repita el ( Sum( c.valor ) - ( ( Sum( c.valor )... pero buen, ya fue xD
Ah, ahora que veo bien me parece que el Having me hubiese servido desde el primer momento,, lol
Saludos