2010-03-30 3 views
2

내가, 내가, 두 개의 테이블이Grails는 GORM (최대 절전 모드) 쿼리

select * from table1 where table1.x not in 
     (select x from table 2 where y='something'); 

그래서 GORM에서 아래의 SQL 문을하려고하고 표 2에없는 표 1에서 항목을 찾을 필요 해요 . Grails의

def xx= table2.findByY('something') 
    def c = table1.createCriteria() 
    def result= c.list { 
     not (
     in('x', xx) 
    ) 
} 

에서 구문은 잘못이며, 내가하지 SQL 로직에 을 시뮬레이션하는 방법을 모르겠어요.

학습의 요점으로, 누군가 grails/groovy의 빼기 (-) 연산자가 목록과 함께 작동하지 않는 이유를 말해 줄 수 있다면. x와 y를 따로 얻으려고했는데 x.minus (y)를 사용했지만 목록을 변경하지 않았습니다. 나는 Groovy on Grails list - not working?에 대한 설명을 보았지만 정의 된 목록은 로컬 일 것으로 예상됩니다.

정말 고마워요.

+0

http://www.grails.org/GORM+-+Querying에서 HQL 쿼리를 사용하는 방법을 보았지만 기준 구문을 더 선호합니다. 감사합니다 – bsr

답변

5

흠, 그래서 난 그냥 내 자신을 GORM을 배우고,하지만 내가 볼 한 가지에 는 그루비에서 예약어라고하고하면 '에서'로 이스케이프 할 필요가

+0

당신은 바로 그 키워드입니다,하지만 나는 언급 한대로 탈출 할 수 없었다. 나는 Restrictions.in (import org.hibernate.criterion.Restrictions)을 사용했고 구문은 괜찮았다. 아직도 나는 논리 작업을 얻을 수 없었다. 나는 거기에 참여하는 '추가'키워드가 있다고 생각하지만, 작동시키지 못했습니다. 누군가가 나를 올바른 방향으로 인도 해주기를 바랍니다. ur 도움을위한 감사합니다 – bsr

2

좋아 .. 얻었다 .. 관심있는 사람 ..

Stephen이 맞았습니다. 예약어이므로 'in'을 사용하여 탈출해야합니다. 구문은 다음과 같습니다.

def c = table1.createCriteria() 
    def result= c.list { 
     not { 
     'in'("x", xx) 
//xx could be a list, array etc. eg: [1,2,3] 
    } 
} 
0

는 Grails의 2.4 때문에, 당신은 notIn & DetachedCriteria(where)를 통해 하위 쿼리를 사용하여 단일 쿼리와이 쿼리를 작성할 수 있습니다

&을 우리는 two syntax 있습니다 : 귀하의 경우를 들어

@java.lang.Override public Criteria notIn(java.lang.String propertyName, QueryableCriteria<?> subquery) 

@java.lang.Override public Criteria notIn(java.lang.String propertyName, groovy.lang.Closure<?> subquery) 

을, 다음해야 작품 :

def c = Tabl1.createCriteria().list { 
       notIn 'x',Table2.where { eq('y','something') }.projections { 
        property 'x' 
        }.list() 
    }