Thank you Michael,

What about using this type of thing inside another query?

I keep getting:

AttributeError: 'Select' object has no attribute '_nested_statement'


Seth


On Sep 8, 7:16 am, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
> an example of NOT IN (subquery):
>
> >>> from sqlalchemy import *
> >>> from sqlalchemy.sql import column, table
> >>> s =
>
> select([column("foo")]).select_from(table("bar")).where(~column("foo").in_(select([column("bar")]).select_from(table("bat")).where(column("bar")==5)))>>>
>  print s
>
> SELECT foo
> FROM bar
> WHERE foo NOT IN (SELECT bar
> FROM bat
> WHERE bar = :bar_1)
>
> Seth wrote:
>
> > I'm experiencing some problems when trying to do layered subqueries,
> > especially relating to doing a NOT IN (SUBQUERY). I can't get
> > SQLAlchemy to put the sub-query SELECT inside parenthesis, so my query
> > is failing with an error.
>
> > I'm trying to do a query across three tables, with some rather
> > complicated logic.
>
> > I have 3 tables:
>
> > POSTS with columns: table with id, user_id, title, body, created
> > DISCUSSIONS with columns: id, post_id, user_id, title, body, created
> > COMMENTS with columns: id, post_id, discussion_id, user_id, title,
> > body, created
>
> > A COMMENT belongs to a DISCUSSION, which then belongs to a POST. What
> > I need to do is make a query that pulls all the POST columns, and then
> > does a count of all the users "involved" in that post. By "involved",
> > I mean that I need to get a count of the user_id's in DISCUSSIONS and
> > COMMENTS which have an entry with that post_id.
>
> > The "by hand" SQL would look something like this (brace yourself):
>
> > SELECT posts.id AS posts_id, posts.user_id AS posts_user_id,
> > posts.title AS posts_title, posts.created AS posts_created,
> > users_profile.name AS users_profile_name,
> > (anon_1.discussions_users_count + anon_1.comments_users_count) AS
> > anon_1_users_count FROM users_profile, posts
> > LEFT OUTER JOIN (SELECT discussions.post_id AS post_id, count(*) AS
> > discussions_users_count, (SELECT count(discussion_comments.user_id)
> > FROM discussion_comments WHERE discussion_comments.user_id NOT IN
> > (SELECT discussions.user_id FROM discussions WHERE discussions.post_id
> > = 1 GROUP BY discussions.user_id) AND discussion_comments.post_id = 1
> > GROUP BY discussion_comments.user_id) AS comments_users_count FROM
> > discussions GROUP BY discussions.post_id) AS anon_1 ON posts.id =
> > anon_1.post_id
> > WHERE posts.user_id = users_profile.user_id ORDER BY posts.created
> > DESC
> >  LIMIT 10 OFFSET 0
>
> > However, I can't get SQLAlchemy to replicate the "NOT IN (SELECT ...)"
> > subquery setup. It strips the parenthesis after the NOT IN and so I
> > get a syntax error.
>
> > Advice would be appreciated!
>
> > Seth
>
>
--~--~---------~--~----~------------~-------~--~----~
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