由于加入表而导致的记录重复

Posted

技术标签:

【中文标题】由于加入表而导致的记录重复【英文标题】:Duplication of Records due to join a table 【发布时间】:2021-05-15 23:40:19 【问题描述】:

如标题所述,我尝试加入表格时出现重复记录

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

Month_id customer_name Amount
202012 A 10000
202012 B 569
202012 C 23000

第二张表称为“日期”

Year 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 条记录

EX:客户 A

我该如何解决这个问题?

【问题讨论】:

您能否以格式化文本而不是图像的形式发布数据?这将有助于人们尝试对您的示例数据进行查询 SELECT DISTINCT ... 不会吗? 【参考方案1】:

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

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 金额和事情发生变化

【讨论】:

谢谢,它很有用,由于使用了 Microstrategy,我无法修改连接表,它将始终保持原样。但是,我正在寻找另一种方法来修改“客户”表来解决这个问题。你觉得呢? 刚刚展示了一个方法,但要注意约束

以上是关于由于加入表而导致的记录重复的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005 冻结(由于应用程序),需要记录 [重复]

troubleshooting记一次Kafka集群重启导致消息重复消费问题处理记录

SQL Server - 合并大表而不锁定数据

学生成绩管理系统C语言不用链表而用结构体数组如何实现

按最近日期加入 BigQuery 中具有重复记录的表

如何在加入时仅返回最新记录[重复]