【问题标题】:I have been attempting to update a table on SQL Developer [duplicate]我一直在尝试更新 SQL Developer 上的表 [重复]
【发布时间】:2016-04-27 20:48:08
【问题描述】:

我正在尝试使用 SQL Developer 中的另一个表来更新一个表。数据结构如下所示:

Table_to_be_updtated

Shipment    pkg_type.
1395         1
1395         1
1395         1
2233         2
5466         3

Table_with_update_info

Shipment       pkg_type.
1395            3
1395            3
1395            3
2233            1
5466            2

这是我的更新程序查询

UPDATE d 
SET d.pkg_type = bd.pkg_type 
FROM Table_to_be_updtated.Shipment d
JOIN Table_with_update_info.Shipment bd
ON bd.Shipment = d.Shipment;

这只是我最近的尝试。我已经尝试过其他版本的更新查询,但没有成功。我希望有人可以帮助我。

谢谢

【问题讨论】:

  • sql developer是oracle工具,你确定你的tag是对的吗?
  • Fdxie,欢迎来到 StackOverflow。 [sql-server] 标记特定于 Microsoft SQL Server。 SQL Developer 和 Oracle 有自己的标签。我已根据内容重新标记了您的帖子,但请注意这一点。回答者也可能想知道您使用的是什么版本的 Oracle。
  • FROMUPDATE 语句中无效

标签: sql oracle


【解决方案1】:

对于初学者,看起来您在表声明中引用列,但不管怎样 - 在 Oracle 中执行此操作的最简单方法是使用以下语法:

UPDATE Table_to_be_updtated d
   SET pkg_type = (SELECT bd.pkg_type 
                     FROM Table_with_update_info bd
                    WHERE bd.Shipment = d.Shipment);

其他方式,looks at Justin`s answer on correlated updates here

【讨论】:

  • 我在上面尝试了您的建议,但收到以下错误:SQL 错误:ORA-01427:单行子查询返回多于一行
  • 如果有帮助的话,Table_to_be_updated 中的记录不会因为 Table_with_update_info 中的不匹配而被更改。
  • 我正在使用 Oracle SQL Developer 版本 3.0.04
  • 如果子查询对于给定的 pkg_type 从 table_with_update_info 返回多于一行,那么由您决定选择要使用的正确行的规则。您需要查看数据并制定您的业务规则,然后我们才能在这种情况下为您提供正确的答案。您可以“SELECT shipping, count() from table_with_update_info group by shipping with count() > 1”找到导致问题的货件行,然后深入数据以确定您的需求继续。
猜你喜欢
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
相关资源
最近更新 更多