2012-09-27 4 views
1

courier_routes 테이블에 위치 테이블에 대한 두 개의 외래 키가 있습니다. courier_routes 테이블의 열은 start_location_id 및 end_location_id입니다. (저는 Oracle을 사용하고 있습니다)Distinct JPA의 여러 열 이상

courier_routes 테이블에서 택배가 있었던 모든 별개의 위치를 ​​찾고 싶습니다.

이 예

|id |start_location_id| end_location_id|... 
|1|1|2| 
|2|1|3| 
|3|4|5| 
|4|2|1| 

I 작동 IDS 1 2 3 4 5

내 SQL을 다시 얻으려면 내가 JPA에이를 번역 할

SELECT loc FROM (
SELECT start_location_id AS loc FROM courier_routes 
UNION 
SELECT end_location_id AS loc FROM courier_routes); 

입니다을 고려하십시오. Hibernate는 유니온을 지원하지 않으므로 하위 쿼리에 대해 생각했습니다. 이 문제는 성능에 영향을 줄 수 있다는 점에서 문제가됩니다.

나는 같은 것을 생각하고 있었는데 (의사 코드 ...)

SELECT id FROM locations where id in (
    (SELECT start_location_id FROM courier_routes) 
     OR 
    (SELECT end_location_id FROM courier_routes)); 

는 쉬운 방법이 있나요? 이 테이블은 커질 것이므로 하위 쿼리를 사용하고 싶지는 않습니다.

두 개의 개별 쿼리 결과를 세트에 추가하여 Java에서 공용체를 수행해야합니까?

감사

+0

나는이 솔루션들이 취하는 (네이티브 SQL 쿼리를 사용하는 솔루션을 포함하여) 각각의 시간을 측정하고, 최선의 것을 선택합니다. 마지막 제안 솔루션 (두 개의 쿼리)은 오라클이 두 개의 하위 쿼리를 포함하는 쿼리로 자체적으로 수행하는 것입니다. –

답변

0

당신은이 HQL에있는 두 개의 열을 결합 할 수 있습니다 :이 도움이

SELECT distinct loc.id FROM locations loc, courier_routes c 
    where loc.id=c.start_location_id OR c.id=c.end_location_id 

희망!