我使用Oracle Apex Shuttle字段like(3:4:5)
将表ID作为外键保存到另一个表中。现在我想使用IN
Clause在sql查询中使用这些IDS。我已使用:
功能将,
替换为replace
但显示
未找到数据
消息。
当我使用静态值时,以下查询正常工作。
select * from table where day_id IN(3,4,5)
但是当我尝试使用
时select * from table where id IN(Select id from table2)
它显示没有找到数据。
答案 0 :(得分:2)
根据我的理解,你有一个像1:2:3:4
这样的列表,你想在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;
这将返回:
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
);
答案 1 :(得分: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);