2017-03-16 1 views
0

6 행, ID, Country, Currency_Name, Alphabetic_code, Numeric_Code, Minor_Unit으로 통화에 대한 ISO 4217 values 테이블이 있습니다.JPA에서 DISTINCT 선택

은 내가 4 most used currencies에 대한 데이터의 일부를 취득해야하고, 내 "순수"SQL 쿼리는 다음과 같이 간다 : 내가 필요한 데이터와 함께 4 행 테이블을 반환

select distinct currency_name, alphabetic_code, numeric_code 
from currency 
where ALPHABETIC_CODE IN ('USD','EUR','JPY','GBP') 
order by currency_name; 

합니다. 여태까지는 그런대로 잘됐다.

이제 이것을 JPA XML 파일로 변환해야하며 문제가 시작됩니다. 내가 얻기 위해 노력하고있어 쿼리는 다음과 같다 :

SELECT DISTINCT c.currencyName, c.alphabeticCode, c.numericCode 
FROM Currency c 
WHERE c.alphabeticCode IN ('EUR','GBP','USD','JPY') 
ORDER BY c.currencyName 

이 그 통화의 일부를 가지고 각 국가에 대해 하나의 행으로 목록을 반환합니다 (같이 쿼리에는 "DISTINCT"이 없다면). 그리고 왜 내 머리를 긁적입니다. 따라서 질문은 다음과 같습니다.

1) "순수한"SQL이 제공하는 것을 되돌리기 위해 어떻게이 쿼리를 만들 수 있습니까?

2) 왜이 쿼리가 내 "DISTINCT"절을 무시하고있는 것입니까? 여기에 실종 된 것이 있는데, 나는 무엇을 얻지 못합니다. 무슨 일이야, 내가 못지고있는거야?

편집 : 글쎄, 이것은 더 이상 해지고 있습니다. 어떻게 든 JPA 쿼리는 의도 한대로 작동합니다 (4 행 반환). (좀 더 많은 정보를 필요에 따라) 나는 이것을 시도했다 :

SELECT DISTINCT c.currencyName, c.alphabeticCode, c.numericCode, c.minorUnit, c.id 
FROM Currency c 
WHERE c.alphabeticCode IN ('EUR','GBP','USD','JPY') 
ORDER BY c.currencyName 

그리고 ID가 4 행 테이블을 돌아 돌아갑니다 쿼리에서 제거로 모든 것을 엉망으로되어 보인다. 그리고 괄호를 넣는 것은 쓸모가 없습니다.

btw, 우리는 이클립스 링크를 사용하고 있습니다.

+0

로그를 사용하여 찾을 의도 예를 들어, GROUP BY를 사용하여, 당신은 이런 일을 할 수있는 하나 이상의 열에서 별개를 실행하려면 JPQL을 번역 한 SQL을 알려줄 것입니다. –

답변

1

당신이 가진 문제는 당신이 열 목록 (c.currencyName, c.alphabeticCode, c.numericCode, c.minorUnit, c.id)

  • 별개은 select 절

에 언급 된 전체 열에서 실행되고 내가 믿는 검색하려고 할 때입니다 "ID "열은 DB 테이블의 모든 레코드에 대해 고유하므로 다른 열에 중복되는 가능성이 있습니다. (c.currencyName, c.alphabeticCode, c.numericCode, c.minorUnit)

그래서 여기에 DISTINCT가 특정 열이 아닌 전체 행에서 실행되고 있습니다. 고유 한 이름을 가져 오려면 열만 선택하십시오. 경우에

당신은 당신의 JPQ 공급자에 대해 c.currencyName, c.alphabeticCode

SELECT DISTINCT c.currencyName, c.alphabeticCode, c.numericCode,c.id 
FROM Currency c 
WHERE c.alphabeticCode IN ('EUR','GBP','USD','JPY') GROUP BY c.currencyName, c.alphabeticCode 
ORDER BY c.currencyName 
+0

이제 SQL과 JPA에서 DISTINCT가 다르게 동작하므로 몇 가지 테스트를 실행 한 후에 일부 쿼리에서 오타가 생길 것입니다. BTW, GROUP BY 절이 작동하지 않았습니다 ... ID를 지금 남겨 둘 것 같습니다. – Neuromante