我想查询一个结表列的值aID匹配ID列表的所有值ids=[3,5]列bID。
aID
ids=[3,5]
bID
这是我的联结表(JT):
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()
session.query(JT.aID).filter(JT.bID.in_(ids)).all()
该查询返回的aID值1,2并且3因为它们都与行的任一3或5在bID列。我希望查询返回的内容是2因为这是唯一在其列aID中具有ids列表所有值的值bID。
1
2
3
5
ids
不知道如何更好地解释问题,但是我如何得出结果呢?
您正在寻找对行集有效的查询。我认为带有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)