1

我正在编写自定义 Oracle 查询以从子表中删除数据,以避免将外键约束作为清理测试数据的实用程序的一部分。

假设我有两个表 - 表 1 (PK - (id1,id2)) 和表 2 (FK -(id3,id4)),其中 id1,id2,id3,id4 都是数字类型。表 2 对表 1 的主键有一个复合外键约束。这是我现在所拥有的(现在只是选择,稍后将更改为删除):

select (cast(t2.id3 as varchar2(30)) || ',' || cast(t2.id4 as varchar2(10)))  
as new_search from Table2 t2 where new_search in 
(select (cast(t1.id1 as varchar2(30)) || ',' || cast(t1.id2 as varchar2(10))) 
as new_search from Table1 t1 where t1.someColumn=someValue);

但是,执行此操作会给我 ORA-00904 NEW_SEARCH:invalid_identifier。所以,我的问题是:

(1)我在这里做错了什么?(2) 有没有更好的方法来做到这一点?

谢谢。

4

1 回答 1

2

1)您不能在 where 子句中使用列别名
2)试试这个:

select t2.id3, t2.id4 
from Table2 t2 
where (t2.id3, t2.id4) in 
  (select t1.id1, t1.id2 
   from Table1 t1 
   where t1.someColumn=someValue
  );
于 2013-02-21T22:36:14.040 回答