10

columnaIDの ID のリストのすべての値と一致するcolumn の値について、ジャンクション テーブルにクエリを実行したいと考えています。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()

このクエリはaID1を返します。これは、列2にまたは3が含まれる行がすべてあるためです。クエリに返してもらいたいのは、それがその列にリストのすべての値を持つ唯一の値だからです。35bID2aIDidsbID

問題をより適切に説明する方法がわかりませんが、どうすれば結果を得ることができますか?

4

3 に答える 3

11

@Gordon Linoffの回答に基づいて、2つのテーブルがAあり、SqlAlchemyと呼ばれる1対多の関係があるB場所は次のようになります。ABA.bs

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()
于 2014-01-14T01:41:43.467 に答える
5

行のセットで機能するクエリを探しています。節を持つグループによるグループ化が最良のアプローチだと思います:

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)
于 2012-11-12T20:07:17.350 に答える
0

試す:

    session.query(JT.aID).filter(not_(JT.bID.in_(ids))).all()
于 2013-06-01T06:49:51.737 に答える