我有一个表,主键是唯一的,但是具有重复值的辅助列。其他表使用此主键进行链接。
我想在列不为空的所有表中基于辅助列合并重复值,如果可能的话,最好的方法也是如此。
表1
- T1Column1(PrimaryKey)
- T1Column2 ( have duplicate values )
表2
- T2Column1 (primaryKey)
- T2Column2 (Some column)
- T2Column3 (Table 1 Primary Key)
不确定我问的是否清楚。
使用表1中包含重复项的表1合并所有值(如果它们不为空)。
示例
--Retrieve all values that have duplicates . Note Primary Is not a duplciate but i need rsaid to be unique
for r in
select * from importedcase where id in ( select max(id) from importedcase
group by rsaid having count(*) > 1) order by id
loop
-- second loop is to merge or update the tables and then will delete the old data
for rs in
select * from importedcase where rsaid = r.rsaid
group by rsaid having count(*) > 1 order by id
loop
--UPDATE all tables using
end loop;
end loop;
这个例子是我认为应该发生的但不确定如何实现目标。 注 - 从表1中获取将用于合并或更新的最大ID,然后删除其他的
表和列
importedcase
id - rsaid - c3 - c4
1 - 1111 - Test - ''
2 - 1111 - '' - foo
3 - 1231 - '' - ''
secondtable
id - importedcase_id - column3 - column 4
1 - 1 - somedate - hasdata
2 - 2 - test - ''
3 - 3 - foo - ''
我的结果应该是让导入的case中的rsaid是唯一的我想用导入的case中的max id更新第二个表以及如果它不为null则使用数据
结果可能看起来像这样
importedcase
id - rsaid - c3 - c4
2 - 1111 - Test - foo
3 - 1231 - '' - ''
secondtable
id - importedcase_id - column3 - column 4
2 - 2 - test - hasdata
3 - 3 - foo - ''
答案 0 :(得分:0)
通过左连接将表连接到自身会很有效。此外,确保右手主键更高或者你最终会得到太多。我还使用了一个带有MIN()函数的group by,因为你可能在那里有一些你不知道的地方,并且你将拥有2列。
select
min(t1.keyCol)
,t1.valueCol
,min(t2.keyCol)
from yourTable t1
left join yourTable t2
on t1.valueCol = t2.valueCol
and t1.keyCol < t2.keyCol
group by t1.valCol