我有这样的基准测试表
BMID TestID BMTitle ConnectedTestID
---------------------------------------------------
1 5 My BM1 0
2 6 My BM2 5
3 7 My BM3 5,6
4 8 My BM4 10,12,8
5 9 My BM5 0
6 10 My BM6 3,6
7 5 My BM7 8,3,12,9
8 3 My BM8 7,10
9 8 My BM9 0
10 12 My BM10 9
---------------------------------------------
稍微解释一下表格
在这里,TestID和连接的TestID扮演着角色。如果用户想要 TestID 3 的所有基准测试
它应该返回 testID=3 的行,以及是否有任何具有连接的 TestID 列的行在逗号分隔值中具有该 testID
这意味着如果用户指定值 3 作为 testID,它应该返回
---------------------------------------------
8 3 My BM8 7,10
7 5 My BM7 8,3,12,9
6 10 My BM6 3,6
--------------------------------------------
希望清楚这 3 行是如何返回的。表示第一行是因为 testID 3 在那里。其他两行,因为 3 在其连接的 ID 单元格中
你应该修复数据结构。 在逗号分隔的列表中存储数字 ID 是一个坏主意、坏主意、坏主意:
- SQL Server 没有最好的字符串操作函数。
- 将编号存储为字符串是一个坏主意。
- 具有未声明的外键关系是一个坏主意。
- 生成的查询不能使用索引。
在探索什么是联结表以便解决数据结构问题时,可以使用如下查询:
where testid = 3 or
',' + ConnectedTestID + ',' like '%,3,%'