【发布时间】:2017-08-25 23:47:42
【问题描述】:
表 1:
A B C
Test 1 This
Test1 1;4 That
Test2 7 What
Test3 6;2 Which
Test4 1;2;7 Where
表 2:
X Z
1 Sun
2 Mon
3 Tue
4 Wed
5 Thu
6 Fri
7 Sat
Sql:
Select
t1.A,
t2.Z
from
[dbo].[Table 1] t1
inner join [dbo].[Table2] t2
on t1.B = t2.X
它仅适用于在 B 列中只有 1 个条目但在 2 个或更多条目处失败的行。
我怎样才能修改 Sql 以便它给我这样的结果:
A Z
Test Sun
Test1 Sun;Wed
Test2 Sat
Test3 Fri;Mon
Test4 Sun;Mon;Sat
【问题讨论】:
-
您使用什么数据库引擎?其次,为什么将多个值存储在单个列中?那是糟糕的桌子设计。能改吗?
-
对不起...让我更新我的问题。而且我知道,不幸的是,这是给我们的设计。
-
这不适合 RDBMS。从
Table 2检索数据,并使用更适合该问题的语言(Java、C#、C++)在内存中执行搜索和替换。 -
修复您的数据!不要将 numeric id 列表存储为分隔的 string 列表。这只是在关系数据库中存储数据的错误方式。
-
如果您无法修复表格设计,您可能需要调查字符串拆分器。这里有一些很好的选择。 sqlperformance.com/2012/07/t-sql-queries/split-strings
标签: sql sql-server tsql sql-server-2012 inner-join