tavol wrote:
> I want to list the all 'Groups' that 'Users' belong to as indicated by
> the User2Group link table  - as well as the Groups the user does not
> belong to. This returns the desired data set except it is not filtered
> for a particular user,
>
> # output not filtered for user
> s.query(Group, User2Group).outerjoin(User2Group).all()
> # psuedo output - not filtered:
> # Group 1 <Yes>
> # Group 2 <Yes>
> # Group 2 <Yes>
> # Group 3 <Yes>
> # Group 2 <Yes>
> # Group 4 <Yes>
> # Group 1 <None>
> # Group 2 <None>
> # Group 3 <None>
> # Group 4 <None>
>
>  If I add a filter, then then the query seems to become more like
> inner join as both Group and User2Group are filtered for user_id = 5
>
> # groups not linked to id = 5 excluded
> s.query(Group).outerjoin(User2Group).filter(User2Group.user_id==5).all
> ()
>
> # Output too filtered:
> # Group 2 <Yes>
> # Group 3 <Yes>
>
> Any suggestions how I can return a list of all groups and show where
> there is a User2Group record for e.g. User ID 5
>
> # Desired output:
> # Group 1 <None>
> # Group 2 <Yes>
> # Group 3 <Yes>
> # Group 4 <None>
>
> thanks for any suggestions
>   
When you want to apply a filter to the right-hand side of the outer join
but not the left-hand side, you have to include the filter as part of
the outer join's ON clause. Here is a query that should work (I'm
assuming you want True/False as your second tuple element in the
results; not tested):

s.query(Group, User2Group.<anycolumn> != None).outerjoin((
    User2Group,
    (User2Group.group_id == Group.id) & (User2Group.user_id == 5))).all()

which should roughly translate to this SQL:

SELECT [Group columns], User2Group.<anycolumn> IS NOT NULL
FROM Group
OUTER JOIN User2Group ON User2Group.group_id = Group.id AND User2Group.user_id 
= 5

Note the lack of a WHERE clause in the query and SQL.

Hope it helps,
-Conor


--~--~---------~--~----~------------~-------~--~----~
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