2009-09-30 1 views
1

내가 좋아하는 (실제로 SQL에 등 iBatis를, JDBC를 사용) 자바에서 뭔가를하고 싶습니다배열에서 항목을 선택하는 방법 (IN 절 세부 정보)?

SELECT SUM(rowName) FROM myTable WHERE id = [myArrayOfIds] 

myArrayOfIds 거의 모든 길이가 될 수 있습니다. 이제 내가 할 수 있다는 것을 알고 있습니다.

SELECT SUM(rowName) FROM myTable WHERE id IN (x, y, z) 

긴 목록은 어떻게됩니까? 예를 들어 내 목록은 몇 가지 항목에서 수백 개 또는 그 이상의 항목으로 작을 수 있습니다. 어떻게해야합니까?

답변

1

나는 그것이 SQL의 사용자의 취향에 따라 생각에 가입 할. 예를 들어, 오라클은 IN() 목록에 1000 개가 넘는 값을 허용하지 않습니다. 다른 맛은 다양 할 수 있습니다.

1

하나 개의 대안이 테이블에 그 ID를 삽입하는 것입니다, 다음은

SELECT SUM(rowName) FROM myTable ta inner join tempTable tb on ta.id = tb.id 
+0

여전히 문제는 아니며 배열 (IN)을 삽입 명령으로 옮겼습니다. –

+0

"in"을 사용하여 삽입 할 수는 없지만 트랜잭션 내에서 일련의 명령문을 작성할 수 있습니다. – BlackTigerX

+0

성능이 실제로 나쁜지 먼저 테스트하고 "in"을 사용하여 유사한 select 문을 수행했습니다. 성능이 좋기 때문에 다른 대안을 시도 할 필요가 없습니다. – BlackTigerX

0

오라클은 IN 절에 1000 개가 넘는 항목을 허용합니다. 이것을 제한하는 것이 당신의 지속성 도구입니다. iBatis 또는 Hibernate. Oracle Sqlplus를 사용하면 이것이 Oracle 제한 사항이 아님을 알 수 있습니다.

Suggestion from BlackTigerX 또는 여러 번 쿼리를 호출하여 한 번에 1000 개의 항목을 전달하고 결과를 집계 할 수 있습니다. 어쨌든, 당신은 단지 지속성 도구 제한을 해결하기 위해 노력하고 있습니다.

+0

아니요, 그렇지 않습니다. 오라클은 in 절에서 최대 1000 개의 값을 허용합니다. – Ben