[英]Elasticsearch wildcard query in Java - find all matching fields and replace
[英]SQL query with 1:n relation, find all entities which have two matching children matching
我有一個簡單的父子關系(1:n,@ OneToMany),由JPA映射。
一個孩子(除其他外)具有以下屬性:
我現在要查找所有父元素,它們至少具有以下兩個子元素:
例如,一個實體可以有10個孩子,但是其中兩個必須符合上述條件。
您是否有任何使用SQL / JPA Criteria API進行處理的提示?
是EXISTS子句走的路,是這樣的:
SELECT * FROM Parent parent
WHERE EXISTS (SELECT child FROM Child WHERE (child.user = 'user1' AND child.type = 'type1' OR ...) AND child.id=parent.id)
OR
EXISTS (SELECT child FROM Child WHERE (child.user = 'user1' AND child.type = 'type2' OR ...) AND child.id=parent.id)
謝謝你的幫助!
更新:父級代表“郵件”,子級關系代表郵件的發送者和接收者,如下所示:
Parent Table (Mail):
|id | subject |
|1 | Hello World |
|2 | Foo Bar |
|3 | Example |
|4 | Test |
Child Table:
|id | user | type |
|1 | user1@mail| SENDER |
|1 | user2@mail| RECEIVER |
|1 | user3@mail| RECEIVER |
|2 | user1@mail| SENDER |
|2 | user4@mail| RECEIVER |
|2 | user5@mail| RECEIVER |
|3 | user2@mail| SENDER |
|3 | user1@mail| RECEIVER |
|3 | user5@mail| RECEIVER |
|4 | user3@mail| SENDER |
|4 | user1@mail| RECEIVER |
|4 | user2@mail| RECEIVER |
子表的主鍵是(id,user,type)的組合鍵。 id列是1:n關系的連接列。
我想查找所有由user1發送並由user2接收的郵件,反之亦然,例如,兩個用戶之間交換的郵件。
輸入示例:'user1','user2'結果:郵件1和3,但不包含郵件4,因為在郵件4中,兩個用戶都是接收者。
一個巧妙的技巧是計算這樣的父母擁有的唯一孩子的數量:
SELECT *
FROM parent p
WHERE EXISTS (SELECT child_id
FROM child c
WHERE user IN ('user1', 'user2') AND
type IN ('type1', 'type2') AND
c.parent_id = p.id
GROUP BY child_id
HAVING COUNT(DISTINCT user) = 2 AND
COUNT(DISTINCT type) = 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.