1

我正在尝试使以下 SQL 语句起作用:

UPDATE myschema.tableA update_tableA
   SET field_id = 
   ( SELECT src.field_id 
         FROM myschema.srcTable src
         INNER JOIN myschema.tableB tableB ON 
            update_tableA.id = tableB.id 
            AND SDO_ANYINTERACT( tableB.shape, src.shape ) = 'TRUE' );

当我运行此语句时,我收到以下错误:

ORA-00904: "UPDATE_TABLEA"."ID": invalid identifier

我不能在嵌套选择中使用嵌套选择之外的变量吗?有什么想法吗?

PS 标识符在数据库表中确实有效。问题似乎是范围,但我想确保这确实是一个问题。

4

4 回答 4

3

我不相信您可以在不在要连接的表之一中的列上加入(即在 ON 子句中使用它)。额外的谓词需要在 WHERE 子句中。

试试这个:

UPDATE myschema.tableA update_tableA
   SET field_id = 
   ( SELECT src.field_id 
         FROM myschema.srcTable src
         INNER JOIN myschema.tableB tableB ON 
           SDO_ANYINTERACT( tableB.shape, src.shape ) = 'TRUE'
        WHERE update_tableA.id = tableB.id 
   );
于 2008-11-14T21:03:54.187 回答
0

查看上面的SQL,这是我的想法

1)myschema.tableA 没有 ID 列(可能是 field_id)
2)SELECT 似乎没有提供连接条件

SELECT src.field_id FROM myschema.srcTable src INNER JOIN myschema.tableB tableB ON

用 tableB 加入 src 的条件在哪里?

于 2008-11-14T20:16:52.643 回答
0

可以在嵌套选择中使用更新中的字段,如以下测试所示:

drop table test;
create table test as (select 1 key, 'a' value from dual);
insert into test values (2,'b');
select * from test;
update test t1 
   set value = (select 'c' from dual where t1.key=2);
select * from test;

我不确定为什么它在这种情况下不起作用。似乎有必要与 TableA 进行显式连接。

于 2008-11-14T21:00:47.110 回答
0

我必须承认我对Oracle并不熟悉,但我或多或少被SQL Server的SQL方言打败了。我上次查看时,这种 SQL 方言不允许在 UPDATE 语句中为要更新的表指定别名。即在 SQL Server 中,标识符update_tableA.id将是非法的。甲骨文有可能有同样的限制吗?

于 2008-11-15T09:26:44.173 回答