我有一张桌子ISO 4217 值 https://en.wikipedia.org/wiki/ISO_4217货币(有 6 行、ID、国家/地区、货币名称、字母代码、数字代码、次要单位)。
我需要获取一些数据4种最常用的货币 https://en.wikipedia.org/wiki/Template:Most_traded_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 行表。而且加括号是没用的。
顺便说一句,我们正在使用 eclipse 链接。