SQL-需要一个查询来获取给定用户ID的所有不同消息线程

SQL-需要一个查询来获取给定用户ID的所有不同消息线程,sql,tsql,Sql,Tsql,我有一个简单的消息传递模式,其中每条消息都有一个senderFK和一个recipientFK,每个映射到一个用户记录。对于当前用户,我需要获取所有不同的线程。不同线程是发送或接收消息的用户的senderFK或recipientFK 例如: 此查询获取向当前用户发送消息的所有用户: SELECT DISTINCT senderFK AS threadID FROM Messages WHERE recipientFK = 'usr_developer' SELECT DISTINCT recip

我有一个简单的消息传递模式,其中每条消息都有一个senderFK和一个recipientFK,每个映射到一个用户记录。对于当前用户,我需要获取所有不同的线程。不同线程是发送或接收消息的用户的senderFK或recipientFK

例如:

此查询获取向当前用户发送消息的所有用户:

SELECT DISTINCT senderFK AS threadID FROM Messages
WHERE recipientFK = 'usr_developer'
SELECT DISTINCT recipientFK AS threadID FROM Messages
WHERE senderFK = 'usr_developer'
此查询获取从当前用户收到消息的所有用户:

SELECT DISTINCT senderFK AS threadID FROM Messages
WHERE recipientFK = 'usr_developer'
SELECT DISTINCT recipientFK AS threadID FROM Messages
WHERE senderFK = 'usr_developer'
如何将这些查询组合成一个表,每个用户有一个不同的行和一个列(threadID)

请注意,您不再需要
DISTINCT
,因为
UNION
将过滤掉任何重复项


请注意,您不再需要
DISTINCT
,因为
UNION
将过滤掉任何重复项。

类似的操作应该可以:

SELECT recipientFK as UserId, senderFK as ThreadID
 FROM Messages
UNION
SELECT senderFK as UserID, recipientFK AS threadID
 FROM Messages

此方法根据您的评论删除用户筛选器。
…每个用户都有一个不同的行。

类似的方法应该可以工作:

SELECT recipientFK as UserId, senderFK as ThreadID
 FROM Messages
UNION
SELECT senderFK as UserID, recipientFK AS threadID
 FROM Messages

此方法根据您的注释省去了用户筛选器。
…每个用户有一个不同的行。

如果是SQL Server,您可以执行以下操作:

select distinct case when senderFK = 'usr_developer' then recipientFK else senderFK end ThreadID
from Messages
where 'usr_developer' in (senderFK, recipientFK)
同样,如果您愿意/它优于以下条件,您可以更改WHERE子句:

select distinct case when senderFK = 'usr_developer' then recipientFK else senderFK end ThreadID
from Messages
where senderFK = 'usr_developer' 
   or recipientFK = 'usr_developer'

如果是SQL Server,则可以执行以下操作:

select distinct case when senderFK = 'usr_developer' then recipientFK else senderFK end ThreadID
from Messages
where 'usr_developer' in (senderFK, recipientFK)
同样,如果您愿意/它优于以下条件,您可以更改WHERE子句:

select distinct case when senderFK = 'usr_developer' then recipientFK else senderFK end ThreadID
from Messages
where senderFK = 'usr_developer' 
   or recipientFK = 'usr_developer'

如果迈克尔的工会不是你想要的,你能展示一些你想要的样本行吗?如果结果正确,请接受。执行并集时,所有列(本例中为一列)中的值重复的任何行在输出中仅显示一次。听起来这就是你想要的。如果迈克尔的工会不是你想要的,你能展示一些你想要的样本行吗?如果结果正确,请接受。执行并集时,所有列(本例中为一列)中的值重复的任何行在输出中仅显示一次。听起来这就是你想要的。是的,不需要区分。是的,不需要区分。