SQL where子句与复合键

时间:2013-02-21 22:29:57

标签: sql oracle foreign-keys where composite-key

我正在编写自定义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)有没有更好的方法呢?

感谢。

1 个答案:

答案 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
  );