簡體   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