如何根据另一个表中的值更新表?

时间:2015-07-06 16:40:31

标签: oracle plsql sql-update correlated-subquery

我正在尝试使用另一个表中列中包含的值更新一个表中的列。 我已经尝试了以下但它给了我一个错误,说它返回多行。

update Table1 set description1 = (select description2 from Table2)
where customer_id in (select customer_id from Table2);    

任何指导?

2 个答案:

答案 0 :(得分:1)

要执行相关更新,子查询必须返回单行。几乎总是如此,您可以通过关联告诉您table2中的哪一行映射到table1的哪一行来执行此操作。假设两个表都有一个名为key的列是唯一的

UPDATE table1 t1
   SET description = (SELECT t2.description2
                        FROM table2 t2
                       WHERE t1.key = t2.key)
 WHERE t1.customer_id IN (SELECT t2.customer_id
                            FROM table2)

答案 1 :(得分:0)

似乎select description2 from Table2返回多行。 由于Oracle不知道要准确更新哪个值(description)。

如果要将所有值更新为相同的值(WHERE CLAUSE),请使用description并将行过滤为1。如果查询select description2 from Table2仅返回1行,请检查并运行。

Else Cave建议使用密钥进行相关更新。