2015-10-02 29 views
1

我使用Oracle Apex Shuttle字段like(3:4:5)将表ID作为外键保存到另一个表中。现在我想在使用IN子句的sql查询中使用这些IDS。我已经取代:使用replace功能,但它表明将字符串列表转换为Oracle数据库中的数字

找不到数据

消息。

当我使用静态值时,以下查询正常工作。

select * from table where day_id IN(3,4,5) 

但是当我尝试使用

select * from table where id IN(Select id from table2) 

,也没有任何发现的数据。

+0

你确定你在表2中有3,4,5个吗? – dcieslak

+0

我很困惑。您在第一个查询中使用的列是'day_id',然后在第二个查询中,您使用'id'.if它只是一个错字,确保您所期望的数据在表2中 – brenners1302

回答

1

从我了解你,你想在一个IN子句中使用像1:2:3:4列表;您可以将列表分成分隔值是这样的:

select regexp_substr('1:2:3:4','[^:]+', 1, level) as list from dual 
connect by regexp_substr('1:2:3:4', '[^:]+', 1, level) is not null; 

这将返回:

List 
1 
2 
3 
4 

然后,你可以简单地把它添加到您的查询是这样的:

SELECT * 
FROM TABLE 
WHERE day_id IN 
    (SELECT regexp_substr('1:2:3:4','[^:]+', 1, level) AS list 
    FROM dual 
     CONNECT BY regexp_substr('1:2:3:4', '[^:]+', 1, level) IS NOT NULL 
    ); 
+0

我的列表显示的分层结构与您不一样告诉上面。 –

0
Can you try below statement. It has working as you expected. 

create table table1 (id number, name varchar2(20)); 
alter table table1 add constraints pri_cons primary key(id); 
create table table2 (id number, name varchar2(20)); 
alter table table2 add constraints ref_cons FOREIGN KEY(id) REFERENCES table1 (id); 
begin 
insert into table1 values (1,'Bala'); 
insert into table1 values (2,'Sathish'); 
insert into table1 values (3,'Subbu'); 
insert into table2 values (1,'Nalini'); 
insert into table2 values (2,'Sangeetha'); 
insert into table2 values (3,'Rubini'); 
end; 
/
select * from table1 where id IN (Select id from table2); 
相关问题