2015-10-02 37 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); 
相關問題