在 select 语句中使用连接的 Oracle 更新

Posted

技术标签:

【中文标题】在 select 语句中使用连接的 Oracle 更新【英文标题】:Oracle Update using a join in the select statement 【发布时间】:2013-12-03 23:38:09 【问题描述】:

我正在尝试根据联接表中的数据更新字段。我读过 Update 命令不适用于 where 子句中的表连接。但是,我不能使用 Exists 命令解决方法,因为我的条件不是存在链接记录,而是链接记录中的值。

update stock S
set stm_auto_key=186086
From
  STOCK Left Join
  STOCK_RESERVATIONS On STOCK.STR_AUTO_KEY = STOCK_RESERVATIONS.STR_AUTO_KEY
Where
  S.QTY_OH > 0 And
  S.STM_LOT = 128729 And
  STOCK_RESERVATIONS.IND_AUTO_KEY Is Null 

select 语句可以单独工作。但是在更新命令中使用它会产生“SQL 命令未正确结束”。

提前谢谢...

【问题讨论】:

您在FROM 子句中有JOIN 你到底想用你的 sql 做什么?您能否发布更多有关您的表格结构和理想结果的信息。 尝试更新库存 s set stm_auto_key=186086 where S.QTY_OH > 0 And S.STM_LOT = 128729 And s.STR_AUTO_KEY in (select STR_AUTO_KEY from STOCK_RESERVATIONS sr where sr.IND_AUTO_KEY Is Null); 【参考方案1】:

我猜,你需要这样的东西,因为 UPDATE 语句中可能没有 FROM 子句:

update stock S
set stm_auto_key=186086
Where
  S.QTY_OH > 0 And
  S.STM_LOT = 128729 And
  (SELECT STOCK_RESERVATIONS.IND_AUTO_KEY FROM STOCK_RESERVATIONS
   WHERE S.STR_AUTO_KEY = STOCK_RESERVATIONS.STR_AUTO_KEY) Is Null

【讨论】:

完美!有时最好的解决方案是最简单的。非常感谢。

以上是关于在 select 语句中使用连接的 Oracle 更新的主要内容,如果未能解决你的问题,请参考以下文章

在连接条件中使用时语句在 oracle 中不起作用的情况

Oracle数据库基础知识:SELECT语句

oracle的SQL语句中的(+) 左外连接

oracle 数据库中,应用程序里的连接探測语句的正确使用

Oracle - 查询语句 - 多表关联查询

求解oracle的grant语句:每个职工只对自己的记录有select权力