首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TSQL问题-链接表

TSQL问题-链接表
EN

Stack Overflow用户
提问于 2011-01-20 06:00:44
回答 2查看 456关注 0票数 2

我试图做一个相当直接的TSQL链接表,但我在第一个障碍,基本上我想要一个双向链接。

例如..。

如果联系人1添加了联系人2,则联系人2连接到联系人1(反之亦然),这是因为查询识别出他们是配对的。

表示例

代码语言:javascript
运行
复制
RelatedDataID  UniqueID   Related_UniqueID  
-------------------------------------------    
1              AA          BB   
2              CC          DD                     
3

用户表

代码语言:javascript
运行
复制
UserID  UniqueID   Username
----------------
1        AA       Bob    
2        BB       Fred    
3        CC       Charlie
4        DD       Billy

所以基本上,当我使用UniqueID "AA“运行查询时,它将返回

代码语言:javascript
运行
复制
Username     RelatedID
------------------------    
Bob          1    
Fred         1    
Charlie      0
Billy        0

但是,当我在UniqueID "CC“上运行它时,它应该返回

代码语言:javascript
运行
复制
Username   RelatedID
---------------------
Bob        0    
Fred       0    
Charlie    2
Billy      2

有人知道我是如何做到这一点的吗?我当前的存储过程似乎只返回链接的存储过程,而不带回未链接的存储过程。我需要它返回所有用户的完整列表,但要让RelatedID返回为0或RelatedDataID。

UniqueID是GUID。

下面是我的TSQL语句。

代码语言:javascript
运行
复制
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))
EN

Stack Overflow用户

发布于 2011-01-20 06:05:39

只需将UniqueID (筛选器/where)条件移动到左连接条件中

代码语言:javascript
运行
复制
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'
END
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4741297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档