我有一个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 结果将是111
如果UserUid是K1和T1 结果将为空
如果UserUid是N1和E1 结果将是444
答案 0 :(得分: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
答案 1 :(得分:1)
SELECT @ThreadUid = ThreadUid
FROM Users
WHERE UserUid= @UserUid1 and ThreadUid=(Select ThreadUid From Users Where UserUid=@UserUid2)
如果它不相同则返回null并且如果K1和N1具有相同的ThreadUid将返回实际的ThreadUid
答案 2 :(得分: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'
这将为您提供所有记录,ThreadUid
和UserID = K1
UserID = 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'