2014-12-30 59 views
0

我有一箇舊的數據庫掉在我的膝蓋,它不是很好的建模。蹩腳的建模是在一個過於複雜的軟件應用程序中處理的,但我需要更加緊密地處理數據庫。拆分單元格中的字符串並創建多行

,而不是如何理解外鍵關係工作,數據庫建模這樣的:

  • Table1包含ID_1Value
  • Table2包含ID_2AnotherValueID_1s

其中ID_1是一個INT和ID_1s是一個varchar包含一個管道分隔的ID_1引用字符串(即'1 | 4 | 5',這意味着它被引用到table1.ID_1爲1,4或5的行)

現在,我需要連接這兩個表,而不是通過它們來分析應用程序並將它們鏈接起來編程。同時,我不能修改數據庫模型本身,因爲它會破壞應用程序。

Bsaically,我需要模仿與我有什麼多對多的關係。

有沒有人有一個這樣做的有點堅實的方式的想法?

(在未來,還有就是基本上重新設計數據庫,並使用視圖作爲應用程序的抽象計劃。)

+0

怎麼樣創建,通過拆分爲varchar表函數「|」字符並從這個函數執行連接? –

+0

是這樣的嗎? http://stackoverflow.com/questions/314824/t-sql-opposite-to-string-concatenation-how-to-split-string-into-multiple-reco – xQbert

+0

你正在開發新的代碼將使用你的新的虛擬多一對多的關係?如果是這樣,更改數據模型有什麼限制?爲什麼添加新視圖是個問題? – Serg

回答

0

我想你可以使用類似這樣

SELECT 
    Table1.*, 
    Table2.* 
FROM 
    Table1 
    INNER JOIN Table2 
    ON PATINDEX('%|'+LTRIM(RTRIM(CONVERT(NVARCHAR(100), Table1.ID_1)))+'|%', Table2.ID_1s) <> 0 
1

雖然不會是最快的查詢,你可以申請相同的思路這裏概述:Parameterize an SQL IN clause

SELECT Table1.Value 
FROM Table1 
INNER JOIN Table2 
    ON '|' + Table2.ID_1s + '|' LIKE '%|' + CAST(Table1.ID_1 AS varchar(20)) + '|%' 

-- Add any other conditions in a WHERE clause. 
相關問題