【问题标题】:How to update a table based on the values in another table?如何根据另一个表中的值更新表?
【发布时间】:2015-07-06 16:40:30
【问题描述】:

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

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

有什么指导吗?

【问题讨论】:

  • 你能解释更多你想要做什么吗?原因是第一个子选择,(select descriptrion2 from Table2)
  • 基本上我要做的是使Table1中的列description1等于Table2中的列description2。两个表中的每一行都有一个相同的 customer_id 列。

标签: oracle plsql sql-update correlated-subquery


【解决方案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)

【讨论】:

  • 我认为 OP 正在尝试使用 customer_id 作为键,但加入不正确
  • @Nimesh - 在这种情况下,key 将在实际查询中替换为 customer_id。另一方面,customer_id 可能只是密钥的一部分,而不是完整的密钥。
【解决方案2】:

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

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

按照 Justin Cave 的建议,使用密钥进行相关更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2019-08-20
    相关资源
    最近更新 更多