【问题标题】:Update table data using two joins in SQL在 SQL 中使用两个连接更新表数据
【发布时间】:2021-12-11 05:15:44
【问题描述】:

我有 3 个表,它们相互关联。如何将表 3 中的数据上传到表 1?

我试过这段代码:

UPDATE table1
SET t1.new_column = t3.old_data
FROM table1 t1
INNER JOIN table2 t2 ON t1.some_key = t2.some_key
INNER JOIN table3 t3 ON t2.some_key2 = t3.some_key2;

但它不起作用。谢谢!

【问题讨论】:

  • 1) 问:您的数据库是什么?问:您是否收到任何语法错误或警告? 2)请准确澄清“什么不起作用”。建议: 3) 出于调试目的,将“UPDATE/SET”更改为简单的“SELECT”,并确保查询正确。特别要确保“SELECT”至少返回一行。
  • 您确定连接后行集不为空,因为查询看起来结构正确。尝试对这些连接进行选择并确保。此外,如果您使用别名,您应该继续使用它们,在更新中选择您 UPDATE t1 SET...
  • 感谢您的建议和帮助!
  • 不,它们充满了数据,并且使用 SELECT 可以正常工作
  • 我在 PLSQL 工作,它说 SQL 命令没有正确结束。

标签: sql oracle join


【解决方案1】:

在 Oracle 中更新连接是先使用连接,然后再使用更新。因此语法看起来像:

UPDATE (
select t1.new_column , t3.old_data
FROM table1 t1
INNER JOIN table2 t2 ON t1.some_key = t2.some_key
INNER JOIN table3 t3 ON t2.some_key2 = t3.some_key2
)
set new_column = old_data

连接必须产生所谓的“保留键”数据,即从查询返回的行必须与目标表中的行一一映射,否则会出错。

因此,人们经常选择将更新重写为 MERGE 语句。

【讨论】:

  • 成功了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2019-05-05
  • 2015-03-03
相关资源
最近更新 更多