SQL Server查询计数

时间:2012-11-30 10:33:50

标签: sql sql-server

我有两个表InvitationsUsers,两个表都包含一些电子邮件。

我想计算Invitation表中但不存在于Users表格中的电子邮件

邀请

InvitationID    Email
-------------------------------------
    1           test@test.com
    2           someone@example.com
    3           test12@test.com

用户

UserName                  IsActive
-------------------------------------
test@test.com             InActive
sample12@sample.com       Active
test12@test.com           InActive

我试过这样的

SELECT  COUNT(*) FROM Invitations, Users                                     
where Invitations.Email <> Users.UserName

我想要这样

Count=1

3 个答案:

答案 0 :(得分:8)

你得错了答案,因为你算错了。

想象一下两张记录,每张表中的a和b。 a&lt;&gt; b和b&lt;&gt; a所以你得到2,而不是你期望的0。

试试这个

Select count(*) 
from Invitations
     left join Users                                     
     on Invitations.Email = Users.UserName
where Users.UserName is null

答案 1 :(得分:3)

select count(*)
from Invitation i
where not exists (select 1 from Users u where i.email = u.userName)

在我看来,这是最简单的方法,您可以事件读取它:计算Invitation表中UsersuserNameemail等于{{1}}中不存在行的所有行}}

答案 2 :(得分:3)

你可以尝试这个:

SELECT COUNT(*)
FROM Invitation
WHERE Email not in (
    SELECT u.username
    FROM Users
)