I saw that, but I'm not using a subquery in the from clause. Maybe I wasn't clear enough. Example:
outeruser = aliased(User) inneruser = aliased(User) innerselect = session.query(inneruser.id).filter(inneruser.id == outeruser.id).subquery() At this point I already have a problem, the generated from clause is something like: from user as user_2, user as user_1 I didnt want the other user_2, because the filter statement is actually referencing the user of the outerselect: outerselect = session.query(outeruser).filter(outeruser.id == innerselect) I expected that the innerselect referenced the id of the outer select. (That example was really a useless scenario, I'll try to make a better one later) 2011/5/26 Michael Bayer <mike...@zzzcomputing.com> > take a look at > http://www.sqlalchemy.org/docs/orm/tutorial.html#using-subqueries and note > that when a subquery is used as a FROM clause, it acts like a table. Use > the .c. attribute. > > > On May 26, 2011, at 3:34 PM, Israel Ben Guilherme Fonseca wrote: > > 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. > > > -- > 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. > -- 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.