成员
ID MemberID UserID UserID2
1 7 1 0
2 6 4 1
3 4 6 12
4 2 8 18
5 1 1 4
6 3 7 0
我使用了这个SQL语句:
SELECT COUNT(DISTINCT CHECKSUM(UserID,UserID))FROM Membership
但我只得到6
我想获得UserID和UserID2列的所有唯一记录。
1,4,6,7,8,12,18(不包括0)= 7
有什么建议吗?
答案 0 :(得分:3)
如果您想计算不同的值,请先尝试union all
:
select count(distinct UserId)
from ((select UserId from MemberShip
) union all
(select UserId2 from Membership
)
) mu
where UserId <> 0;
编辑:
评论中提到了以下版本:
select count(*)
from ((select UserId from MemberShip
) union
(select UserId2 from Membership
)
) mu
where UserId <> 0;
我更喜欢union all
版本,因为我通常会尽可能避免使用union
。删除重复项的额外步骤总是会产生额外的性能 - 虽然在这里很有用,但通常不需要它。这就是我更喜欢union all
版本的原因。
虽然不简单(在我看来),但这个版本在某些数据库中有一个可能的小优势。如果Membership
表在UserId
和UserId2
上有单独的索引,则更容易利用这些索引进行查询。请注意,这不消除了重复数据删除(因为需要对两列中的用户列表进行去除),但它确实(可能)减少了重复数据删除中的成员数量步骤