0

我有一个 MessageThread 表

UserUid   ThreadUid
===================
K1    111
N1    111
K1    222
K1    333
N1    444
R1    111
R1    222
D1    333
E1    444
T1    555

一个 threadUid 仅用于同一组用户。

K1 和 N1 只能具有相同的 ThreadUid。

如果我知道 UserUid:K1 和 N1

我如何知道 K1 和 N1 是否具有相同的 ThreadUid?

有没有办法根据提供的 UserUid 获取 ThreadUid?似乎不可能...

------------

如果 UserUid 为 K1 并且 N1 Result 将为 111

如果 UserUid 是 K1 并且 T1 结果将为空

如果 UserUid 为 N1 并且 E1 结果将为 444

4

3 回答 3

2

要查找两个用户共有的线程:

select  mt1.ThreadUid
,       count(*) as ThreadCount
,       (
        select  count(distinct mt3.UserUid) 
        from    MessageThread mt3 
        where   mt1.ThreadUid = mt1.ThreadUid
        ) as UsersInThread
from    MessageThread mt1
join    MessageThread mt2
on      mt1.ThreadUid = mt2.ThreadUid
where   mt1.UserUid = 'K1'
        and mt2.UserUid = 'N1'
group by
        mt1.ThreadUid

SQL Fiddle 的示例。

于 2012-10-13T08:23:41.243 回答
1
SELECT @ThreadUid = ThreadUid 
    FROM Users
    WHERE UserUid= @UserUid1 and ThreadUid=(Select ThreadUid From Users Where UserUid=@UserUid2)

如果不相同则返回 null,如果 K1 和 N1 具有相同的 ThreadUid,则返回实际的 ThreadUid

于 2014-10-29T11:51:43.847 回答
0

这可能有效(未经测试):-

SELECT ms1.UserUid, ms1.ThreadUid, ms2.UserUid, ms2.ThreadUid 
FROM MessageThread ms1, MessageThread ms2
WHERE ms1.ThreadUid <> ms2.ThreadUid AND
ms1.UserUid = 'K1' AND ms2.UserUid = 'N1'

这将为您提供所有记录,这些记录具有不同ThreadUidUserID = K1UserID = N1

看起来这可能会给你duplicate记录。请检查并恢复。我没有sql-server安装所以无法测试。

或者更好的是,您可以返回相同的记录ThreadUid:-

SELECT ms1.UserUid, distinct ms1.ThreadUid, ms2.UserUid, ms2.ThreadUid 
FROM MessageThread ms1, MessageThread ms2
WHERE ms1.ThreadUid = ms2.ThreadUid AND
ms1.UserUid = 'K1' AND ms2.UserUid = 'N1'
于 2012-10-13T08:26:05.850 回答