Oracle SQL-基于非唯一数据合并两个表
基本上,我们正在寻找一种方法,将一个充满错误数据的表与一个有好数据的表合并起来,以“修复”它,但我想要的好数据中有相当多的重复数据,我需要对这些重复数据进行分组,以便我可以进行匹配 因此,在这种情况下,简化如下:Oracle SQL-基于非唯一数据合并两个表,sql,oracle,sql-merge,Sql,Oracle,Sql Merge,基本上,我们正在寻找一种方法,将一个充满错误数据的表与一个有好数据的表合并起来,以“修复”它,但我想要的好数据中有相当多的重复数据,我需要对这些重复数据进行分组,以便我可以进行匹配 因此,在这种情况下,简化如下: Customer_Records - Bad Data in SERIES_ID | TITLE | SERIES_ID | TYPE | | EX1 | 00000 | 1 | | EX2 | 00009 | 1 | | EX3 | 01234
Customer_Records - Bad Data in SERIES_ID
| TITLE | SERIES_ID | TYPE |
| EX1 | 00000 | 1 |
| EX2 | 00009 | 1 |
| EX3 | 01234 | 2 |
Series_Records - Good data
| TITLE | SERIES_ID | SUBSERIES_ID |
| EX1 | 98555 | 00001
| EX1 | 98555 | 00002
| EX2 | 98764 | 00098
| EX2 | 98764 | 00108
因此,在本例中,我尝试使用SERIES Record表中的SERIES_ID更新Customer Records表中的SERIES_ID。我有一个可以与之匹敌的头衔
我的尝试如下:
merge into CUSTOMER_RECORDS CR
using (select TITLE, SERIES_ID from SERIES_RECORDS GROUP BY TITLE, SERIES_ID) SR
on (CR.TITLE = SR.TITLE)
when matched then
update set CR.SERIES_ID = SR.SERIES_ID;
但是,当我这样做时,我会得到:
`A stable set of rows could not be got because of large dml activity or a non-deterministic where clause`
有什么想法吗?如果您只关心序列号,并且序列号记录中的(标题、序列号)无论子序列号如何都是相同的,那么您就不能这样做:
merge into CUSTOMER_RECORDS CR
using (select DISTINCT TITLE, SERIES_ID from SERIES_RECORDS ) SR
on (CR.TITLE = SR.TITLE)
when matched then
update set CR.SERIES_ID = SR.SERIES_ID;
序列号记录表中是否有标题相同但序列号不同的行?如果是这样的话,那么您将必须确定要选择哪一行(min/max?),或者以另一种方式将序列号与标题绑定。我尝试了上述方法,但得到了与之前相同的答案:由于大型dml活动或不确定的where子句,无法获得一组稳定的行。嗯,我使用您的示例数据运行了一个设置,合并成功了。因此,与实际表数据相比,无法从所显示的示例确定series_记录的其他情况。“从序列号记录中选择不同的标题、序列号”是否显示具有不同序列号和相同标题的记录?