我有以下数据需要获取具有相同ACTION,PARENT_ID,CHILD_ID和TYPE的记录,并使用最少ID设置这些记录的ID。 在下面的情况下,交易1456014,1456016,1456018和1456019具有相同的ACTION,PARENT_ID,CHILD_ID和TYPE组。所以我需要将这4条记录的ID设置为12851,这是4条中最少的。
TXN_ID ACTION ID PARENT_ID CHILD_ID TYPE
1456014 CREATED 12851 653022 370023 Acquisition
1456016 CREATED 12852 653022 370023 Acquisition
1456018 CREATED 12853 653022 370023 Acquisition
1456019 CREATED 12854 653022 370023 Acquisition
1456013 CREATED 12855 653020 370023 Acquisition
1456012 CREATED 12856 653022 370024 Acquisition
答案 0 :(得分:1)
这样的事情应该做你想要的事情
UPDATE table_name dest
SET dest.id = (SELECT MIN(src.id)
FROM table_name src
WHERE src.action = dest.action
AND src.parent_id = dest.parent_id
AND src.child_id = dest.child_id
AND src.type = dest.type)
WHERE EXISTS( SELECT 1
FROM table_name src
WHERE src.action = dest.action
AND src.parent_id = dest.parent_id
AND src.child_id = dest.child_id
AND src.type = dest.type
AND src.id != dest.id );
如果要更新大部分数据,您可能希望删除EXISTS
子句并更新每一行(产生一些无意义更新的成本)而不是承担执行{的成本{1}}。
退一步说,你想要首先执行此操作的事实意味着你对表有一个规范化问题。如果EXISTS
取决于id
,action
,type
和child_id
,并且这四个属性至少不是唯一键,则表示这些属性可能需要在数据模型中考虑因素。