我正在编写自定义Oracle查询以从子表中删除数据,以避免将外键约束作为清理测试数据的实用程序的一部分。
假设我有两个表 - 表1(PK - (id1,id2))和表2(FK - (id3,id4)),其中id1,id2,id3,id4都是Number类型。表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)有没有更好的方法呢?
感谢。
答案 0 :(得分: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
);