Emanuel Calvo Franco escribió:
El día 22 de enero de 2009 20:22, Alvaro Herrera
<[email protected]> escribió:
Linos escribió:

Bueno, encontré un par de cosas, modifique la consulta

SELECT lin.id_ticket,
      lin.linea_id,
      mo.referencia,
      art.talla,
      lin.pvp_teorico,
      lin.pvp_real
FROM
        (select * from (SELECT ofe.oferta_id, ofe.nombre
                               FROM modelo as mo2, oferta AS ofe
                                    JOIN modelo_oferta AS tie_ofe ON 
tie_ofe.id_oferta =
ofe.oferta_id
                                     WHERE tie_ofe.id_modelo = mo2.modelo_id
                                       ORDER BY prioridad DESC) as tabla limit 
1) as tabla_oferta,
    ticket_cabecera AS cab
        JOIN ticket_linea AS lin ON lin.id_ticket = cab.ticket_id
        JOIN articulo AS art ON art.articulo_id = lin.id_articulo
        JOIN modelo AS mo ON mo.modelo_id = art.id_modelo
WHERE lin.modificado_manual IS TRUE
AND   lin.id_oferta IS NULL
ORDER BY lin.id_ticket,
        lin.linea_id;

Fijate que declare nuevamente dentro de la subquery modelo (as mo2)
entre otras modificaciones (fijate que saque los schemas porque no los tenia,
busca las tablas que tienen os schemas y completalo.
la consulta asi anda aunque se muy bien que no retorna lo que queres, lo
mas importante es que la subconsulta no me tira error, a partir de ahi
modificala
para que te devuelva lo que necesitas.



Asi me devuelve siempre la oferta con mas prioridad igual que si hiciera el subselect normal en el left join y limitara por 1, en principio con la query en la que uso la subquery dentro del left join y dentro de la subquery igualo a la oferta con mas prioridad para cada referencia (la query q explico en el primer correo q envie a la lista) obtengo los resultados que quiero pero estaba buscando algo mas simple y mas rapido porque me parecia que se me debia estar escapando algo (me parecia demasiado lenta y compleja la query).

Supuse que en postgresql habria una manera mejor de limitar el resultado de una subquery para usarla en un join (una manera mejor de no tener mas de un resultado por referencia aunque estuviera en varias ofertas) pero parece q no hay ninguna, a lo mejor podria usar una funcion que encontre hace tiempo para calcular el rownum en la salida y filtrar por el rownum de la subquery pero estaba intentando encontrar algo mas simple y que no me tuviera que hacer compilar y modificar la configuracion en las bases de datos (que son mas de 20, una por tienda).

Emanuel gracias por tu tiempo y por intentar ayudarme con ideas nuevas.
Un saludo.
Miguel Angel.
--
TIP 1: para suscribirte y desuscribirte, visita 
http://archives.postgresql.org/pgsql-es-ayuda

Responder a