从另一个表中选择和拆分列值的SQL查询

时间:2017-10-21 15:15:15

标签: sql database sql-server-2008

我有2张桌子

第一张表

Id Type Value
1   2   1,2,3,5
2   1   1,3,6
3   1   2,3,1,6

第二张表

Id Name
1  Leon
2  Anna
3  Biorn
4  Alex
5  Peter
6  Luis

第一个表中的值是第二个表中的ID。

我需要查询从第一个表中按类型返回所有​​名称

例如:

Type = 1
return: Leon,Anna,Biorn,Luis
type = 2
return: Leon,Anna,Biorn,Peter

我正在尝试创建一个如下所示的视图:

Type Name
1    Leon
1    Anna
1    Biorn
1    Luis
2    Leon
2    Anna
2    Biorn
2    Peter

所以我可以轻松地按类型选择所有名称,但我无法弄清楚如何做到这一点。请帮忙!

1 个答案:

答案 0 :(得分:1)

您似乎意识到这是一个糟糕的数据结构。您应该有一个联结表 - 将整数列表存储为分隔字符串不是SQLish数据结构。

有时,我们会遇到其他人糟糕的设计决定。这是你可以做的一件事:

select t1.type, t2.name
from table1 t1 join
     table2 t2
     on ',' + t1.value + ',' like ',%' + cast(t2.id as varchar(255)) + '%,';