2017-03-16 100 views
0

我有一個ISO 4217 values貨幣(有6行,ID,國家,Currency_Name,Alphabetic_code,Numeric_Code,Minor_Unit)表。選擇DISTINCT JPA

我需要得到一些數據爲4 most used currencies,和我的「純粹」的SQL查詢是這樣的:

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

與我所需要的數據返回一個4行的表。到現在爲止還挺好。

現在我必須將其轉換爲我們的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,我們正在使用eclipse鏈接。

+0

日誌爲您JPQ提供商會告訴你它已將JPQL翻譯成的SQL。 –

回答

1

你的問題是,當你試圖檢索的列清單(c.currencyName, c.alphabeticCode, c.numericCode, c.minorUnit, c.id)

  • 不同的是在SELECT子句

中提到的所有列運行,我相信「ID 「列是您的分表中的每條記錄都是唯一的,因此您有可能在您的其他列中獲取重複項(c.currencyName, c.alphabeticCode, c.numericCode, c.minorUnit)

因此,在您的情況下,DISTINCT在整行上運行,而不是 特定列。如果您想獲取唯一名稱,請只選擇 列。

的情況下,要對多列,你可以做這樣的事情上運行的不同,使用GROUP BY例如以意圖找到使用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

好吧,現在我明白了,在運行一些更多的測試之後,我會在某些查詢中責怪一個拼寫錯誤,因爲DISTINCT在SQL和JPA上表現不同。順便說一句,GROUP BY子句不起作用......我想我現在將ID留在外面。 – Neuromante