2013-07-18 2 views
0

Web2py DAL 쿼리로 변환하려는 원시 SQL 쿼리가 있습니다. 가능한가? 번역은 더 비효율적 일 수 있습니까?web2py DAL 복잡한 쿼리

테이블은 다음과 같습니다

t_proyecto (f_nombre, ...) 
t_informe (f_proyecto [reference to t_proyecto], ....) 
t_gasto (f_nombre, f_monto, f_informe [reference to t_informe]) 

아이디어는 하나 개의 프로젝트 (t_proyecto가) 많은 보고서 (t_informe를) 및/선언 할 수 있습니다 각 보고서는 많은 비용 (t_gasto)를 가지고있다. 각 프로젝트마다 총 비용이 필요합니다.

이 SQL은 잘 작동하지만 난 해당 DAL 식을 알고 싶습니다 :

result=db.executesql('SELECT f_nombre, SUM(f_monto) 
         FROM t_proyecto, 
          (SELECT f_proyecto, f_monto 
          FROM t_informe, t_gasto 
          WHERE t_gasto.f_informe==t_informe.id) as AuxTable 

         WHERE t_proyecto.id==AuxTable.f_proyecto 
         GROUP BY t_proyecto.f_nombre;') 

내가 몇 가지를 시도했다, 그러나 아무도이 일 것 같았다, 나는이 원시 SQL을 작성 끝났다. 그것을 해결하고 논리를 이해하는 데 도움이 될 것입니다

고마워요!

답변

1

난 당신이 테이블과 하위 쿼리에 가입 할 수 있다고 생각하지 않지만,이 같은 결과

에게 제공해야
SELECT f_nombre, SUM(f_monto) 
FROM t_proyecto, t_informe, t_gasto 
WHERE t_gasto.f_informe==t_informe.id 
AND t_proyecto.id==t_informe.f_proyecto 
GROUP BY t_proyecto.f_nombre; 

DAL 쿼리 :

db((db.t_proyecto.id==db.t_informe.f_proyecto) & 
    (db.t_informe.id==db.t_gasto.f_informe)).select(db.t_gasto.f_monto.sum(), db.t_proyecto.f_nombre, groupby=db.t_proyecto.f_nombre) 
+0

감사합니다! 그것은 위대한 작품! – Sebastian