質問
私は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に?
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')
所属していません StackOverflow