2015-10-02 75 views
0

我有兩個表,讓我們把它叫做表A和表B.它們看起來像:加入用逗號分隔字符串表(使用WHERE)

A.col1  A.colX   B.colY 
1    123    123 
2    234, 123   234  
3    2, 52352   2 
           52352 

我所要做的就是JOIN他們,最有可能使用WHERE,因爲我的環境中不支持非Equi加入。我遇到表A的問題,其中數字是字符串。我試圖與解決方案:

SELECT... 
FROM A, B 
WHERE A.colX LIKE concat('%', B.colY, '%') 

,但它不正確,例如價值2B.colY出現在每個字符串表A.colX工作。

在年底例子就是我想實現:

  output 
1   123 -------> 123 
2   234, 123 --> 234 
1   234, 123 --> 123 
3   2, 52352 --> 2 
3   2, 52352 --> 52352 

你有任何想法?

+3

第一 - 這肯定是不好的表架構設計。而不是像逗號分隔的列表,如'A.colX'中的'234,123',它應該是將這些值保存在不同記錄'234','123'(當然還有一個外鍵返回到表A)的相關表。有了這個單獨的表格,你可以擺脫複雜的連接條件。 –

+0

B.colY的數據類型? – jarlh

+0

我同意你的看法,但是這個數據來自excel文件上傳到數據庫。這兩個表格是Excel中獨立的電子表格。 – Wasciu

回答

2
where (',' || replace(A.colX,' ','') || ',') LIKE ('%,' || B.colY || ',%') 

I.e.從A.colX中刪除空格,在之前和之後添加逗號,然後用逗號與B.colY一起做like

||是串聯的ANSI SQL方式,有些產品使用CONCAT+代替。

+0

看起來它像一個魅力一樣:)你的代碼的一個註釋,替換fucntion應該是:replace(A。 colX,',',''),你的代碼中有太多的符號。謝謝! – Wasciu

+0

糟糕,修好了。感謝您通知我! – jarlh

+0

經過簡短的調查,我發現它無法正常工作。逗號分隔字符串的值缺失。任何解決方案? – Wasciu