I found out the solution by explicitly adding join condition:
eq1 = ad_equipment_table.alias()
eq2 = ad_equipment_table.alias()
e1 = equipment_table.alias()
e2 = equipment_table.alias()

ad_table.join(eq1, join_condition(ad_table, eq1)).join(e1,
join_condition(eq1, e1)).join(eq2, join_condition(ad_table,
eq2)).join(e2, join_condition(eq2, e2))

On Wed, Apr 29, 2009 at 7:12 PM, tomas <to...@drencak.com> wrote:
> Hi,
> I've got table Ad which has many to many relation with table Equipment
> through table ad_equipment. I want to select all ads which have all
> equipments in the list.
>
> Corresponding SQL query will look like this:
>
> select * from ad where ad.id in (
>    select id from ad
>         join ad_equipment eq1 on ad.id = eq1.ad
>         join equipment e1 on eq1.equipment = e1.id
>         join ad_equipment eq2 on ad.id = eq2.ad
>         join equipment e2 on eq2.equipment = e2.id
>    where e1.name = 'name1' and e2.name = 'name2'
> )
>
> How can I do this kind of select? I've tried something like
> eq1 = ad_equipment_table.alias()
> eq2 = ad_equipment_table.alias()
> e1 = equipment_table.alias()
> e2 = equipment_table.alias()
>
> ad_table.join(eq1).join(e1).join(eq2).join(e2)
> but this is not I wanted as resulting SQL joins for e1 and e2 are
> wired together...
>
> Is it possible to create this select by SA expression? Or is there a
> better way how to do that?
>
> thanks,
>  tomas
>

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