我想做一个相当直接的TSQL链接表,但我在第一个障碍,基本上我想要一个双向链接。TSQL问题 - 链接表
例如....
如果联系1将触点2,然后与2被连接到触点1(反之亦然)的想法是,该查询识别它们被配对。
表实例
RelatedDataID UniqueID Related_UniqueID
-------------------------------------------
1 AA BB
2 CC DD
3
用户表
UserID UniqueID Username
----------------
1 AA Bob
2 BB Fred
3 CC Charlie
4 DD Billy
所以基本上当我运行一个查询用的UniqueID “AA”,将返回
Username RelatedID
------------------------
Bob 1
Fred 1
Charlie 0
Billy 0
而且当我运行它在UniqueID“CC”上它应该返回
Username RelatedID
---------------------
Bob 0
Fred 0
Charlie 2
Billy 2
有谁知道我怎么能做到这一点?我目前的存储过程似乎只会带回链接的链接,而不是那些没有链接的链接。我需要它返回所有用户的完整列表,但要让RelatedID返回0或RelatedDataID。
UniqueID是GUID。
这里是我的TSQL语句。
ALTER PROCEDURE sp_Test
@CompanyID int,
@UniqueID varchar(36),
@PersonTypeID int
AS
BEGIN
SET NOCOUNT ON;
SELECT
First_Name + ' ' + Last_Name AS Full_Name,
ISNULL(RelatedDataID,0) AS RelatedDataID
FROM
Users
LEFT JOIN
Related_Data
ON
Users.UniqueID = Related_Data.UniqueID
WHERE
Users.PersonTypeID = @PersonTypeID
AND
Users.Deleted = '0'
AND
((ISNULL(Related_Data.UniqueID,'') = '') OR (Related_Data.UniqueID = @UniqueID OR Related_Data.Related_UniqueID = @UniqueID))
如果可能的话提供一个更详细的例子;为什么Bob在UniqueID = 2没有行时有一个UniqueID = 2的关系? – Andomar 2011-01-19 22:14:52
如果Bob有多重关系会发生什么?例如,假设他与弗雷德和查理有关。 – Thomas 2011-01-19 22:19:12
我想要做的是有双向链接。一个例子是,如果我通过了UniqueID“1”并且UniqueID 1链接到了UniqueID 2,它会显示所有的联系人,但是标志着UniqueID 1链接到了UniqueID 2,反之亦然。所以如果我把UniqueID 2,它会得到所有的联系人,并显示UniqueID 1被链接(因此RelatedDataID) – Tech 2011-01-19 22:31:52