2010-12-19 207 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