小编Nat*_*der的帖子

在Oracle Update语句中使用子查询而不是表名

我需要编写一个更新语句,该语句使用多个表来确定要更新的行,因为在Oracle中,不允许多个表.以下查询将返回"ORA-00971:缺少SET关键字"错误

UPDATE
  TABLE1 a,
  TABLE2 b
SET
  a.COL1 = 'VALUE'
WHERE
  a.FK = b.PK
  AND b.COL2 IN ('SET OF VALUES')
Run Code Online (Sandbox Code Playgroud)

在oracle上查找UPDATE语句语法,我找到了以下链接,它显示您可以使用子查询代替表名.

当我尝试写这样的查询时,我得到了一个"ORA-01779:无法修改映射到非密钥保留表的列"

UPDATE
  (
    SELECT
      a.COL1
    FROM
      TABLE1 a,
      TABLE2 b
    WHERE
      a.FK = b.PK
      AND b.COL2 IN ('SET OF VALUES')
  ) update_tbl
SET
  update_tbl.COL1 = 'VALUE'
Run Code Online (Sandbox Code Playgroud)

我确实使用EXISTS语句重写了查询(如下所示)并且它工作正常,但仍然想知道如何完成.

UPDATE
  TABLE1 update_tbl
SET
  update_tbl.COL1 = 'VALUE'
WHERE
  EXISTS (
    SELECT
      1
    FROM
      TABLE1 a
      TABLE2 b
    WHERE
      a.FK = b.PK
      AND b.COL2 IN ('SET OF VALUES')
      AND update_tbl.PK = …
Run Code Online (Sandbox Code Playgroud)

sql oracle

13
推荐指数
2
解决办法
9万
查看次数

标签 统计

oracle ×1

sql ×1