![](/img/trans.png)
[英]SQLAlachmey: ORM filter to match all items in a list, not any
[英]SqlAlchemy: filter to match all instead of any values in list?
我想查询一个结表列的值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()
此查询将返回aID
值1
, 2
和3
,因为它们都与任一行3
或5
中的bID
栏。 我希望查询返回的是2
因为这是唯一的aID
值,在其bID
列中具有ids
列表的所有值。
不知道如何更好地解释问题,但是我如何得出结果呢?
基于@Gordon Linoff答案,并用两个表A
和B
,其中A
有关系一对多向B
叫A.bs
的SQLAlchemy的等效是:
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()
您正在寻找对行集有效的查询。 我认为带有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)
尝试:
session.query(JT.aID).filter(not_(JT.bID.in_(ids))).all()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.