2016-05-13 70 views
-2

我想用主键的新值更新我旧表的主键。我想用主键的新值更新表的主键

旧表

catalogId|columnB 

000987|abc 
000765|xyz 

新表

catalogId|columnB 

100001|qwe 
100002|uop 

注: 我想实现的是我想用新的值,即000987必须由100001替换更新旧表和000765与100002等。有很多记录。

如何编写通用查询来执行更新?

+4

在你要执行更新的标准是什么?两个表的列B值不匹配。 –

+0

我有一个映射表,它具有与新的catalogid相匹配的旧catalogid。 我必须使用新映射的新catalogid更新数据库中的旧catalogid。 这里没有参考列。这将是直接更新。 – qwerty

+0

您可以将该映射表导入到表中,然后与该表执行INNER JOIN以执行更新。 –

回答

0

首先,您需要将数据库中的映射表导入为表格或将其用作外部表格。

假设这进口的映射表结构,是

mapping_table 
old_catalogID | new_catalogID | old_columnB | new_columnB 

那么你的更新查询会是这样的:

update ot.old_table ot 
    set ot.catalogId = (select mt.new_catalogID from mapping_table mt 
         where mt.old_catalogID = ot.catalogId), 
     ot.columnB = (select mt.new_columnB from mapping_table mt 
         where mt.old_columnB = ot.columnB);