上下文:
我有这个表,填充了数千个条目:
CREATE TABLE PRICING_TAXAS.FATURAMENTOS_MCC
(
ID_FATURAMENTO_MCC NUMBER(20) not null,
ID_MCC NUMBER(20) NOT NULL,
FATURAMENTO_INI NUMBER(18,2),
FATURAMENTO_FINAL NUMBER(18,2),
CONSTRAINT faturamento_mcc_pk primary key (ID_FATURAMENTO_MCC)
);
'FATURAMENTO_INI'和'FATURAMENTO_FINAL'是货币值,分别表示起始值和结束值。
每个“ID_MCC”对具有不同范围的起始和结束货币值,并且这些对中的每个被分配给pk“ID_FATURAMENTO_MCC”。
然后,我从Spring Service收到了这个查询:
select
ftmcc.id_mcc as idMcc,
(
JSON_ARRAYAGG
(
JSON_OBJECT
(
'idFaturamentoMcc' VALUE ftmcc.id_faturamento_mcc,
'faturamentoInicial' VALUE ftmcc.faturamento_ini,
'faturamentoFinal' VALUE ftmcc.faturamento_final
) RETURNING CLOB
)
) as faturamentos
from
FATURAMENTOS_MCC ftmcc
join
MCC mcc
on
mcc.mcc_cod in :#{#searchDTO.mccCodes}
join
GRUPOMCC_ITEM gMccItem
on
gMccItem.id_mcc = mcc.id_mcc
where
(
COALESCE(:#{#searchDTO.monthlyGrossIncome}, NULL) IS NULL
OR
(
ftmcc.faturamento_ini <= TO_NUMBER(:#{#searchDTO.monthlyGrossIncome})
AND
ftmcc.faturamento_final >= TO_NUMBER(:#{#searchDTO.monthlyGrossIncome})
)
)
group by ftmcc.id_mcc
'MCC'是接收参数'mccCodes'并返回id的表。然后将此id作为外键(n到n)与表“GRUPOMCC_ITEM”配对,返回一个id列表。此id列表是在表“FATURAMENTOS_MCC”中搜索的“id_mcc”列。'FATURAMENTOS_MCC'表也由参数'monthlyGrossIncome'过滤,以将货币范围限制为适合通知的货币的范围。
因此,考虑到“FATURAMENTOS_MCC”上的每个“id_mcc”可以有许多货币范围的组合,但每个组合都是唯一的,因此该服务应仅返回每个id_mdd的1个组合。
但出于某种原因,它返回了这个:
[
{
"idMcc": 44565,
"faturamentos": [
{
"idFaturamentoMcc": 2827,
"faturamentoInicial": 5000,
"faturamentoFinal": 19999
},
{
"idFaturamentoMcc": 2827,
"faturamentoInicial": 5000,
"faturamentoFinal": 19999
},
{
"idFaturamentoMcc": 2827,
"faturamentoInicial": 5000,
"faturamentoFinal": 19999
},
{
"idFaturamentoMcc": 2827,
"faturamentoInicial": 5000,
"faturamentoFinal": 19999
},
“idMcc”没有被重复,这很好,但是货币范围被重复。
有发现吗
我尝试在JSON构建器上使用DISTINCT,但没有成功。
1条答案
按热度按时间uujelgoq1#
为了避免这种重复,可以使用子查询首先聚合每个idMcc的货币范围,然后将此子查询与MCC和GRUPOMCC_ITEM表联接。以下是如何修改查询的示例:
这应该可以防止JSON结果中的货币范围重复,因为每个idMcc只与其唯一的货币范围集相关联。