2013-10-25 32 views
1

標題有點令人困惑,因此我將用示例解釋我正在嘗試執行的操作。Oracle SQL - 將值列表連接到與這些值連接的字段

我有一個名爲「修飾符」的字段。這是一個每個人都有連接值的字段。例如,在一個行的值可以是:

*26,50,4     * 

和下一行

*4      * 

而且表(表一)在價值會是這個樣子:

Key Modifier 
1  *26,50,4     * 
2  *4      * 
3  *1,2,3,4     * 

星號總是處於相同的位置(這裏是1和26),中間有數字不確定的數字,用逗號分隔。

我想要做的是將這個「修飾符」字段「加入」到另一個表格(表B)中,該表格帶有該修飾符的可能值列表。例如,該表看起來是這樣的:

ID   MOD 
1   26 
2   3 
3   50 
4   78 

如果A.modifier值出現在B.mod,我想保留表A.該行,否則,離開它。 (我使用「加入」一詞的意思是鬆散的,因爲我不確定這是我需要的。)

這可能嗎?我會怎麼做?

提前致謝!

編輯1:我意識到我可以使用正則表達式,並做一堆或語句,在MOD列表中搜索逗號分隔的值,但有沒有更好的方法?

回答

0

一種方法是使用TRIM,字符串連接和LIKE。

SELECT * 
FROM tableA a 
WHERE EXISTS(
    SELECT 1 FROM tableB b 
    WHERE 
     ','|| trim(trim(BOTH '*' FROM a.Modifier)) ||',' 
     LIKE '%,'|| b.mod || ',%' 
); 

演示 - >http://www.sqlfiddle.com/#!4/1caa8/10

這個查詢migh是巨大的表仍然緩慢(它始終執行表或索引的完全掃描),但它應該是快於使用正則表達式或解析逗號分隔列入各個值。

+0

感謝您的回覆。我會嘗試這個,而不是使用正則表達式。 – aipeursson