I did a bit more of digging in the docs and found the 'select_from' method.
I thought that it would force the FROM statement to use ONLY what I pass as
argument. But it didn't.

session.query(func.max(alias.data)).select_from(alias).filter(alias.id_curso
== Matricula.id_curso).subquery()

It stills give-me two "matricula" in the from clause. The " ==
Matricula.id_curso", is still enforcing the another "matricula" in the
query.

2011/5/26 Israel Ben Guilherme Fonseca <israel....@gmail.com>

> Hi,
>
> I'm trying to construct a query that have a subquery, and that subquery
> references the outer query attribute. It's almost working actually:
>
> Intended select:
>
> select * from curso c join matricula m on c.id_curso = m.id_curso
>                           where m.id_aluno = 1
>                           and m.data = (select max(sub.data) from matricula
> sub
>                           where sub.id_aluno = m.id_aluno)
>
> Query:
>
>         alias = aliased(Matricula)
>         subquery =
> session.query(func.max(alias.data)).filter(alias.id_curso ==
> Matricula.id_curso).subquery()
>         lista = session.query(Curso) \
>                        .join(Matricula) \
>                        .filter(Matricula.id_aluno == 1) \
>                        .filter(Matricula.data == subquery) \
>                        .all()
>
> Result select:
>
> SELECT curso.id_curso AS curso_id_curso, curso.area AS curso_area,
> curso.carga_horaria AS curso_carga_horaria, curso.ementa AS curso_ementa,
> curso.nome AS curso_nome
>     FROM curso JOIN matricula ON curso.id_curso = matricula.id_curso
>     WHERE matricula.id_aluno = 1 AND matricula.data = (SELECT
> max(matricula_1.data) AS max_1
>
>         FROM matricula AS matricula_1, matricula
>
>             WHERE matricula.id_curso = matricula_1.id_curso)
>
> The only problem here is: the subselect is using two references to
> "matricula" in the from clause:
>
> FROM matricula AS matricula_1, matricula <<<<< this guy shouldn't exist.
>
> I just want the "matricula" from the outer select.
>
> Fixing that, and i'm done. But how can I do that?
>
> Thanks in advance
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to