2013-09-01 3 views
2
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"); 

표 Struture이다 :아래의 SQL 쿼리에 대한 동등한 조건 쿼리?

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

항상 '대답 = M'이 아닐까요? –

+0

아니요, "대답"에서 남성 ("M") 및 여성 ("F")에 대해 YES 또는 NO를 따로 갖고 싶습니다. 하지만 이제는 Male에 대해서만 필요하므로 서브 쿼리에서 나는 대답 = "M"으로 조건을 만들었습니다. – user2541372

+0

외부 쿼리에서 응답을 다시 선택합니다. –

답변

2
  1. 단일 행의 colums으로 두개의 값 또는 다수의 열을 수집하는 가장 적절한 SQL 웨이 에 조인 테이블 (하나 이상의 자체 타임스). 하위 쿼리를 사용하는 것보다 간단하고 편리합니다.
    따라서 최대 절전 모드에서 Deatils에서 Details까지 순환 연결을 생성 할 수 있다면 가장 간단한 해결책 일 것입니다. 하지만 Hibernate는 동일한 엔티티를 join에 두 번 사용하여 이슈 (및 열린 태스크)를 알고 있기 때문에 이것은 불가능하다고 생각한다. 세부 사항은 herehere이다.

  2. 그러나 따라 this answer 당신은 여전히 ​​원래의 SQL 같은 것을 만들기 위해 하위 쿼리로 최대 절전 모드 DetachedCriteria를 사용하려고 할 수 있습니다.

그래도 테스트되지 않았습니다이 코드를 제안하려고합니다 :

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")); 

당신이 쉽게 사용할 것이다 희망과 같은 간단한 작업으로 최대 절전 모드에서 열려있는 다른 문제에 충돌하지 않습니다를 .

+0

SQL 쿼리가 필요 없으며 SQL 쿼리에 대해 동등한 조건 쿼리가 필요합니다. 참고 내 SQL 쿼리를 잘 작동하고 거기에 하나의 테이블이 두 테이블이 있습니다. 같은 테이블에서 내부 쿼리와 외부 쿼리를 모두 작성했습니다. 귀하의 회신에 감사드립니다. 내 질문에 대한 정답을 얻을 수 있기를 바랍니다. – user2541372

+1

아, 어떻게'hibernate-criteria' 태그를 놓칠 수 있겠습니까? 나는 내 대답을 완전히 다시 작성했습니다. 그리고 그건 그렇고, 제 생각에, 원래의 SQL 쿼리에는 문제가있어 테스트가 부족하기 때문에 '잘 작동 할'수 있습니다. –

+0

답변 해 주셔서 감사합니다. 내 문제가 해결된다. – user2541372