我有一个相当简单的SQL查询,我需要根据另一个子表上的查询从父表中获取数据。例如:
父表:
ID NAME
-- ----
22 Frederick
26 James
39 Robert
子表:
PARENT_ID NAME
--------- ----
22 Joey
22 Cindy
26 Robbie
39 Joe
所以我需要一个这样的SQL查询,该查询将获取任何有孩子的父母的名字,这些孩子的名字是 Joe -即Frederick和Robert。
select NAME from PARENTS where ID in (
select PARENT_ID from CHILDREN where NAME like '%Joe%'
);
我正在尝试这样的事情:
Subquery<Child> childSubquery = criteriaQuery.subquery(Child.class);
Root<Child> childRoot = childSubquery.from(Child.class);
Predicate likeChild = criteriaBuilder.like(childRoot.get(Child_.name), '%Joe%');
这会让我的孩子叫 Joe 。
那我该如何找那些孩子的父母呢?
基于this question,我尝试过这样:
CriteriaQuery<Parent> parentQuery = criteriaBuilder.createQuery(Parent.class);
Root<Parent> parentRoot = parentQuery.from(Parent.class);
parentQuery.select(parentRoot);
parentQuery.where(likeChild);
parentQuery.getResultList() <--- this method doesn't exist in CriteriaQuery!!