0

我有两个表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
4

3 回答 3

8

你得到错误的答案是因为你计算了错误的东西。

想象一下每个表中有两条记录,a 和 b。a<>b 和 b<>a 所以你会得到 2,而不是你期望的 0。

试试这个

Select count(*) 
from Invitations
     left join Users                                     
     on Invitations.Email = Users.UserName
where Users.UserName is null
于 2012-11-30T10:37:33.827 回答
3
select count(*)
from Invitation i
where not exists (select 1 from Users u where i.email = u.userName)

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

于 2012-11-30T10:39:10.557 回答
3

你可以试试这个:

SELECT COUNT(*)
FROM Invitation
WHERE Email not in (
    SELECT u.username
    FROM Users
)
于 2012-11-30T10:41:03.997 回答