10

我想在联结表中查询与 columnaID中 id 列表的所有值匹配的ids=[3,5]column值bID

这是我的联结表(JT):

 aID    bID
   1      1
   1      2
   2      5
   2      3
   1      3
   3      5

我有这个查询:session.query(JT.aID).filter(JT.bID.in_(ids)).all()

此查询返回aIDvalues 12并且3因为它们都在列中包含3or5bID行。我希望查询返回的是2因为这是唯一在其列aID中具有列表所有值的值。idsbID

不知道如何更好地解释问题,但我怎样才能得到结果?

4

3 回答 3

11

基于@Gordon Linoff 的回答和两个表AB其中与称为SqlAlchemy 等价物的一对多A关系将是:BA.bs

from sqlalchemy import func  
session.query(A).join(B).filter(B.id.in_(<your_list>)).group_by(A.id).having(func.count(A.bs) == len(<your_list>)).all()
于 2014-01-14T01:41:43.467 回答
5

您正在寻找适用于行集的查询。我认为使用有子句的组是最好的方法:

select aid
from jt
where bid in (<your list>)
group by aid
having count(distinct bid) = 2

如果您可以将所需的 id 放入表中,则可以执行以下更通用的方法:

select aid
from jt join
     bids
     on jf.bid = bids.bid
group by aid
having count(distinct jt.bid) = (select count(*) from bids)
于 2012-11-12T20:07:17.350 回答
0

尝试:

    session.query(JT.aID).filter(not_(JT.bID.in_(ids))).all()
于 2013-06-01T06:49:51.737 回答