2014-06-23 2 views
1

에서 분 '아이디'를 선택하는 방법은 내가 JOOQ 구문 및 집계 기능에 대해 읽어보기JOOQ 어떻게 MySQL의에서 테이블

SELECT MIN(id) FROM table; 

, 내가 얻을 혼란과 같은 쿼리를 실행합니다.

나는 주위 결과의 크기가 0이있는 경우

Result<EventRecord> er2 = context.selectFrom(EVENT).orderBy(EVENT.EVENTID.asc()).limit(1).fetch(); 

는 기록이 존재하지 않는 전체 첫 번째 레코드를 선택하여이 같은 내가 작업을 시도

select(EVENT.EVENTID , min()).from(EVENT).fetch(); 
or 
Result<Integer> er = context.select(EVENT.EVENTID.min()).fetch(); 

일 것이라고 생각하지만, 0이 아니면 올바른 레코드를 얻습니다. min() 함수를 사용하고 싶지만 구문을 올바르게 가져올 수 없습니다.

답변

1

당신은 SQL에서 작성하려는 쿼리는 이것이다 : 당신이 개 시도가 이런 생각이 jOOQ에 국한되지 않는 것을

// 1. You cannot combine single columns with aggregate functions in SQL, 
// unless you're grouping by those columns 
// 2. You didn't pass any cargument column to the MIN() function 
context.select(EVENT.EVENTID , min()).from(EVENT).fetch(); 

// 3. This doesn't specify any FROM clause, so your database won't know what 
// table you want to select the MIN(eventid) from 
context.select(EVENT.EVENTID.min()).fetch(); 

주를 작동하지 않은 이유

SELECT MIN(event.eventid) FROM event 

이다, 그들은 일반적으로 SQL과 관련이있다. jOOQ를 사용할 때 항상 가장 먼저 표현하고 싶은 SQL 문 (내 대답 상단에있는 문)을 생각해보십시오. 그래서 jOOQ 문은 이들의과 같습니다

// "Postfix notation" for MIN() 
context.select(EVENT.EVENTID.min()).from(EVENT).fetch(); 

// "Prefix notation" for MIN(), where min() is static-imported from 
// org.jooq.impl.DSL 
context.select(min(EVENT.EVENTID)).from(EVENT).fetch(); 
+0

귀하의 회신에 감사드립니다 (다시). 내 후킹 표기법 중 하나에서 동일한 구문을 사용했습니다. 결과 r5 = context.select (EVENT.EVENTID.min()). (EVENT) .fetch(); Intellij 컴파일러는 Integer에 밑줄을 긋고 "형식 매개 변수 'java.lang.Integer'가 해당 범위 내에 있지 않으므로 'org.jooq.Record'"를 구현해야합니다. 결과를 에서 으로 변경하면 더 많은 오류가 발생합니다 .... –

+0

'fetch()'에서 반환 된 유형은'Result >'입니다 만, [많은 수의 대체 fetch 메소드] (http : //www.jooq.org/doc/latest/manual/sql-execution/fetching/). 스택 오버플로에 대한 새로운 질문을하면 더 자세히 설명하겠습니다. 덧글은 더 자세한 설명에 매우 적합하지 않습니다 ... –

0

그것은 첫째/낮은 레코드 ID로 기록을 반환합니다 fetchAny() 메소드처럼 보인다.

EventRecord record = context.selectFrom(EVENT).fetchAny(); 

@LukasEder가 언급 한 것처럼 많은 대안 방법이 있으며 관대하고 후속 조치를 취할 수 있습니다. 감사합니다 루카스

+0

그건 아마도 데이터베이스 및/또는 항목이 추가 된 순서에 따라 달라집니다. 나는 그것에 의존하지 않을 것입니다. – assylias