繁体   English   中英

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

[英]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()

此查询将返回aID123 ,因为它们都与任一行35中的bID栏。 我希望查询返回的是2因为这是唯一的aID值,在其bID列中具有ids列表的所有值。

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

基于@Gordon Linoff答案,并用两个表AB ,其中A有关系一对多向BA.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM