[英]SQL Server 2008 inner join with commas
我试图弄清楚如何将具有ID的表内部联接到我的表中,该表中的所有ID都用逗号隔开。
带有逗号的表称为(PA):
usersIDs
56488,51233,71055,98304,21577,12500
该表(SU)具有用户的ID和名称:
UserID | Name
51233 | Bob Barker
21577 | Billy Knox
56488 | David Miller
etc etc
如何在第一个表中将名称与逗号分隔的ID内连接?
SELECT DISTINCT SU.Name, SU.UserID, SU.Enabled
FROM Sec_User AS SU INNER JOIN
Program_Access AS PA ON SU.UserId = PA.userIDS
这是一种没有功能的方法:
SELECT DISTINCT SU.UserID, SU.Name, SU.Enabled
FROM dbo.Sec_User AS SU
INNER JOIN dbo.Program_Access AS PA
ON ',' + PA.usersIDs + ',' LIKE '%,' + RTRIM(SU.UserID) + ',%';
但是为了完整起见而包含该功能(并且因为具有这样的功能对于许多目的非常有用)。 首先创建一个表值函数:
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN ( SELECT Item = CONVERT(INT, Item) FROM (
SELECT Item = x.i.value('(./text())[1]', 'int') FROM (
SELECT [XML] = CONVERT(XML, '<i>' + REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.') ) AS a CROSS APPLY [XML].nodes('i') AS x(i)) AS y
WHERE Item IS NOT NULL
);
现在加入:
SELECT DISTINCT SU.UserID, SU.Name, SU.Enabled
FROM dbo.Program_Access AS PA
CROSS APPLY dbo.SplitInts(PA.usersIDs, ',') AS s
INNER JOIN dbo.Sec_User AS SU
ON SU.UserID = s.Item;
1)首先,创建拆分功能。 这里的例子。
2)然后,尝试执行以下操作:
DECLARE @PA TABLE
( usersIDs VARCHAR(50))
INSERT INTO @PA(usersIDs) VALUES('56488,51233,71055,98304,21577,12500')
DECLARE @SU TABLE
(UserID INT, Name VARCHAR(50))
[enter link description here][2]INSERT INTO @SU(UserID, Name) VALUES (51233, 'Bob Barker')
INSERT INTO @SU(UserID, Name) VALUES (21577, 'Billy Knox')
INSERT INTO @SU(UserID, Name) VALUES (56488, 'David Miller')
SELECT * FROM @PA
CROSS APPLY dbo.fnSplit(usersIDs,',')
LEFT JOIN @SU ON item = UserID
根据此链接如何分割逗号分隔的字符串 ,您可以得到如下结果:
NewPA_Table
RecID UserID
1 56488
2 51233
3 71055
4 98304
5 21577
6 12500
通过生成该结果,您现在可以将其连接到表SU
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.