首页 > 解决方案 > 由于加入表而导致的记录重复

问题描述

如标题所述,当我尝试加入表格时存在记录重复

假设下面的主要表格称为“客户”

Month_id 顾客姓名 数量
202012 一个 10000
202012 569
202012 C 23000

第二张表称为“日期”

Month_id Time_id
2020 202012 20201201
2020 202012 20201202
2020 202012 20201203
2020 202012 20201204
2020 202012 20201205
2020 202012 20201206
2020 202012 20201207
2020 202012 20201208
2020 202012 20201209
2020 202012 20201210
2020 202012 20201211
2020 202012 20201212
2020 202012 20201213
2020 202012 20201214
2020 202012 20201215
2020 202012 20201216
2020 202012 20201217
2020 202012 20201218
2020 202012 20201219
2020 202012 20201220
2020 202012 20201221
2020 202012 20201222
2020 202012 20201223
2020 202012 20201224
2020 202012 20201225
2020 202012 20201226
2020 202012 20201227
2020 202012 20201228
2020 202012 20201229
2020 202012 20201230
2020 202012 20201231

我试图加入他们两个来获取年份(注意:我知道我可以使用 substr 函数从 mont_id 中提取年份,但我不想这样做,因为这只是一个例子)

select a11.month_id, a11.Customer_name, a11.Amount, a12.year
from customer a11
join Date a12 on a11.month_id = a12.month_id

我对上述查询的期望结果如下 在此处输入图像描述

不幸的是,我在行中得到了重复而不是那样。更清楚地说,我为每个客户获得了 31 条记录

例如:客户 A

在此处输入图像描述

我该如何解决这个问题?

标签: sqloracleduplicates

解决方案


您需要按月对日期进行分组;一个简单的方法可能是:

select a11.month_id, a11.Customer_name, a11.Amount, a12.year
from customer a11
join
(
    select month_id, year
    from Date
    group by month_id, year
) a12
on a11.month_id = a12.month_id

另一种方法,无需修改连接部分,可以简单地使用DISTINCT

select distinct c.Month_id,c. customer_name, c.Amount, d.year
from customer c
inner join dateTable d
on c.month_id = d.month_id

但请注意,这在很大程度上取决于每个客户和每个月只有一行的事实;否则你可能需要SUM改变金额和事情


推荐阅读