Select "answer"
from 'Details'
where "question" like 'child'
AND "subject" IN (select "subject"
from 'Details'
where "question" like 'child'
AND "answer" = "M" and "test" ="1");
表结构是:
Subject Test Survey Question answer
----------------------------------------------------
rahul 1 one childimmunization Yes
rahul 1 one childgender M
Jyothi 1 one childimmunization No
Jyothi 1 one childgender F
Chikku 1 one childimmunization No
Chikku 1 one childgender M
答案 0 :(得分:2)
将两行或多行的值收集到单行列中的最合适的SQL方法是自己连接表(一次或多次)。它比使用子查询更简单,更方便。
因此,如果你可以在Hibernate中创建从Deatils
到Details
的循环关联 - 这将是最简单的解决方案。但我想这是不可能的,因为Hibernate已经知道问题(和开放任务)在连接中使用相同的实体两次 - 细节是here和here。
但是根据this answer,您仍然可以尝试使用Hibernate DetachedCriteria
作为子查询来制作与原始SQL非常相似的内容。
我会尝试建议这段代码,但未经过测试:
DetachedCriteria subjectsWithBoys = DetachedCriteria.forClass(Details.class)
.setProjection(Property.forName("subject"))
.add(Restrictions.eq("question", "childgender"))
.add(Restrictions.eq("answer", "M"))
.add(Restrictions.eq("test", "1"));
Criteria criteria = getSession().createCriteria(Details.class)
.setProjection(Property.forName("answer"))
.add(Property.forName("subject").in(subjectsWithBoys))
.add(Restrictions.eq("question", "childimmunization"))
.add(Restrictions.eq("test", "1"));
希望你能够轻松地使用它,并且不会在Hibernate中遇到这样一个简单的任务中的另一个开放问题。