繁体   English   中英

SQL Server 2008内部使用逗号联接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM