質問

私はMessageの提供されたリストにあり、現在のユーザーによってGroupsされていないDeactivatedを照会する必要があります。ここではプロパティとエンティティを説明するためにいくつかの擬似コードがあります:

class Message {
  private int messageId; 
  private String messageText;
}

class Group {
  private String groupId;
  private int messageId;
}

class Deactivated {
  private String userId;
  private int messageId;
}
ここでは、(私が化合物NOT IN式を作った)私が行う方法を知っていないことを最後にAND句だ、私は、クエリに必要なものの考え方です。 userIdによって失活したメッセージをフィルタリングすると、行のサブセットは、messageIdに?

が含まれていない場合、どのように私は確認することができ、複数のmessageIdsにつながることができます
SELECT msg FROM Message msg, Group group, Deactivated unactive
WHERE 
  group.messageId = msg.messageId 
  AND (group.groupId = 'groupA' OR group.groupId = 'groupB' OR ...) 
  AND ('someUserId', msg.messageId) NOT IN (unactive.userId, unactive.messageId)

注:私は前もってgroupIdsの番号がわからないので、...があります。私はそれらを横断し、動的JPQLにそれらを追加する必要がありますので、私はCollection<String>として、それらを受け取るます。

役に立ちましたか?

解決

あなたのクエリでデカルト製品を作っているようです。あなたの結果に到達するためのサブクエリを持っている必要があります。あなたはこのようなクエリを持つことができます:

 SELECT msg
 FROM Message msg, Group grp
 WHERE msg.id = grp.msgId 
       AND grp.id IN (...)
       AND msg.id NOT IN (SELECT msgId FROM Desactivated WHERE userId = 'uid') 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top