[英]SQL query to find out if different rows with same 2nd columns
我有一个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
要查找两个用户共有的线程:
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
SELECT @ThreadUid = ThreadUid
FROM Users
WHERE UserUid= @UserUid1 and ThreadUid=(Select ThreadUid From Users Where UserUid=@UserUid2)
如果不相同,将返回null;如果K1和N1都具有相同的ThreadUid,则将返回实际的ThreadUid
这可能有效( 未经测试 ):-
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'
这将为您提供所有记录,这些记录对于UserID = K1
和UserID = N1
具有不同的ThreadUid
似乎这样可能会给您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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.