我试图做一个相当直接的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))发布于 2011-01-20 06:05:39
只需将UniqueID (筛选器/where)条件移动到左连接条件中
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
AND
((ISNULL(Related_Data.UniqueID,'') = '') OR (Related_Data.UniqueID = @UniqueID OR Related_Data.Related_UniqueID = @UniqueID))
WHERE
Users.PersonTypeID = @PersonTypeID
AND
Users.Deleted = '0'
ENDhttps://stackoverflow.com/questions/4741297
复制相似问题