在 MSSQL 中,基于 ID 的筛选器行以逗号分隔的字符串形式存在于列中



我有这样的基准测试表

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,%'

最新更新