SQL Server:选择包含多个逗号分隔值的行



我有一个包含导入数据的表(a),并且该表中的一个值需要基于该值连接到另一个表(b)。在表b中,有时该值在逗号分隔的列表中,并作为varchar存储。这是我第一次处理包含多个数据块的数据库列。它不是我设计的,我不相信它可以改变,尽管我相信它应该改变。

例如:

Table a:

column_1 
12345
67890
24680
13579

Table b:

column_1
12345,24680
24680,67890
13579
13579,24680

所以我试图将这些表连接在一起,基于这个数字和其他2个,但是当我运行我的查询时,我只得到一个包含13579的表,而其余的都没有。

有什么好主意吗?

将列表存储为逗号分隔的数据结构是设计不良的标志,特别是在存储id时,它们可能是其原生格式的整数。

有时候,这是必要的。下面是一个方法:

select *
from a join
     b
     on ','+b.column_1+',' like '%,'+cast(a.column_1 as varchar(255))+',%'

这将不会执行得特别好,因为查询不会利用任何索引。

的想法是把分隔符(,)在b.column_1的开始和结束。然后,列中的每个值的前后都有一个逗号。然后,您可以搜索a.column_1中添加逗号的匹配项。逗号确保10100不匹配。

如果可能,您应该考虑另一种表示数据的方法。如果您知道最多有两个值,您可以考虑在a中有两个列。但是,一般情况下,您会有一个"联接"表,每对都有单独的行。

最新更新