我的膝盖上有一个旧的数据库,而且模型不是很好。在过于复杂的软件应用程序中处理了糟糕的建模,但我需要更紧密地处理数据库。
数据库的建模方式如下:
,而不是了解外键和关系的工作原理Table1
包含ID_1
,Value
Table2
包含ID_2
,AnotherValue
,ID_1s
其中ID_1
是INT,ID_1s
是包含以管道分隔的ID_1引用字符串的varchar(即' 1 | 4 | 5',表示它被引用到table1.ID_1为1,4或5的行
现在,我需要加入这两个表而不是通过它们解析应用程序并以编程方式链接它们。与此同时,我无法修改db-model本身,因为它会破坏应用程序。
基本上,我需要模仿与我所拥有的多对多关系。
有没有人知道这样做有点可靠?
(将来,有一个计划基本上重新设计数据库并使用视图作为应用程序的抽象。)
答案 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.
答案 1 :(得分:0)
我认为你可以使用这样的东西
SELECT
Table1.*,
Table2.*
FROM
Table1
INNER JOIN Table2
ON PATINDEX('%|'+LTRIM(RTRIM(CONVERT(NVARCHAR(100), Table1.ID_1)))+'|%', Table2.ID_1s) <> 0