2013-10-25 155 views
5

我不知道以下是否可能。SQL内部连接函数返回表

我有一个SQL函数分裂一个彗星分隔的字符串返回一个表与分裂值。

你好,我的名字是约翰

返回一个表:

ITEM 
----- 
hello 
my name 
is 
John 

一个有一个表存储,对于每一行,一个ID和一个昏迷分隔的字符串:

VALUE_TO_SPLIT 
-------------- 
1 | a,b,c 
1 | d,e,f,g 
2 | a,b 
3 | a 
3 | b,c,f 

不使用游标,是否有可能获得结果表?

RESULTING_TABLE 
1 | a 
1 | b 
1 | c 
1 | d 
1 | e 
1 | f 
1 | g 
2 | a 
2 | b 
3 | a 
3 | b 
3 | c 
3 | f 

也就是说,每个分隔值的行都有其id。

+2

您使用的是MySQL还是SQL Server?请停止标记两个;他们*不同*。 –

+0

即使有可能,它通常使用对字符串处理有更好支持的语言来完成。 – newtover

回答

17

函数看起来像一个内联表值函数;如果你可以包含这个函数,我们也可以建议它是否是一个有效的实现(not all are)。

SELECT t.col, s.Item 
FROM dbo.tablename AS t 
CROSS APPLY dbo.function_name(t.value) AS s; 

您还应该考虑不要将单独的值存储为以逗号分隔的列表。数据库表不应该是JSON容器,恕我直言。

+0

这正是我想要的。谢谢。关于在数据库中存储以逗号分隔的列表,完全同意,但它是从以前的开发者继承的:) – nachovall