gpt4 book ai didi

sql - 在 Oracle 更新语句中使用子查询而不是表名

转载 作者:行者123 更新时间:2023-12-03 23:29:16 25 4
gpt4 key购买 nike

我需要编写一个使用多个表来确定要更新哪些行的更新语句,因为在 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')

在oracle上查找UPDATE语句的语法,发现如下 link ,这表明您可以使用子查询代替表名。

当我尝试编写这样的查询时,出现“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'

我确实使用 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 = a.PK
)

谢谢!
-内特

最佳答案

另外一个选择:

UPDATE TABLE1 a
SET a.COL1 = 'VALUE'
WHERE a.FK IN
( SELECT b.PK FROM TABLE2 b
WHERE b.COL2 IN ('SET OF VALUES')
)

如果 (a) View 包含 ,则您的第二个示例将起作用声明 表1的PK:
UPDATE
(
SELECT
a.COL1, a.PKCOL
FROM
TABLE1 a,
TABLE2 b
WHERE
a.FK = b.PK
AND b.COL2 IN ('SET OF VALUES')
) update_tbl
SET
update_tbl.COL1 = 'VALUE'

...和 ​​(b) TABLE1.FK 是 声明 表2的外键

(声明是指存在约束并已启用)。

关于sql - 在 Oracle 更新语句中使用子查询而不是表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/230196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com