2010-12-19 113 views
1

我有列代码的表A中包含的值AB,BC的Oracle SQL查询

----- 
code 
----- 
'AB','BC' 

表B具有以下行

------------------------------ 
AB 4 2 1 
------------------------------ 
------------------------------- 
BC 1 2 3 
-------------------------------- 

对于AB有另一个表B中的行条目同样地,对于BC

我想使用IN子句列码

select regexp_substr(replace (a.code,'''',''), '[^,]+', 1, level) from A a , C b 
WHERE a.id ='SC_1' AND a.id= b.id AND a.name = 'CODE' 
connect by level <= length(regexp_replace(replace (a.code,'''',''), '[^,]*')) + 1 

当我在sql上执行没有结果时,我认为IN子句需要row而不是逗号separate.kindly让我知道如何解决这个问题。

+1

您真的需要将该代码拆分为两个单独的列,以确保性能不受影响。也许看看虚拟列http://www.oracle-base.com/articles/11g/VirtualColumns_11gR1.php – 2010-12-19 22:14:54

回答

3

您需要在几行分裂您code字符串。请尝试:

select * from B 
where B.code in (
    select regexp_substr(code, '[^,]+', 1, level) from A 
    connect by level <= length(regexp_replace(code, '[^,]*')) + 1) 
+0

我喜欢这个。我可能不得不通过两种查询和一些脚本在服务器语言或存储过程中执行此操作。是通过MySQL或许多其他数据库除了甲骨文连接? – 2010-12-19 07:50:23

+0

@Frederic谢谢,我会尝试执行以检查它是否有效。 – 2010-12-19 07:50:40

+0

@jon_darkstar,你应该可以在其他RDBMS中使用'WITH'。请参阅http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/。 – 2010-12-19 07:54:27