一尘不染

SqlAlchemy:筛选以匹配所有而不是列表中的任何值?

sql

我想查询一个结表列的值aID匹配ID列表的所有值ids=[3,5]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()

该查询返回的aID12并且3因为它们都与行的任一35bID列。我希望查询返回的内容是2因为这是唯一在其列aID中具有ids列表所有值的值bID

不知道如何更好地解释问题,但是我如何得出结果呢?


阅读 214

收藏
2021-03-10

共1个答案

一尘不染

您正在寻找对行集有效的查询。我认为带有having子句的分组是最好的方法:

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)
2021-03-10