在内部联接中使用(不在)sql

using (not in) in inner join sql

我有两个 table

1) tbluser 2) userlogin

tbluser 包括

username and email

用户登录看起来像

create table userlogin
(
username varchar(50),
[date] datetime
)

我想 select 从 tbluser 发送电子邮件并验证用户登录(table 2)

我想要 table 1 不在 table 2 的 select 日期范围

的员工的电子邮件

所以我创建了一个程序

alter proc TMSautomail
@datefrm datetime,
@dateto datetime
as
begin
SELECT
     tblUser.Email
from
     tblUser
         inner join
     userlogin
         on
      tblUser.UserName not in userlogin.username
where userlogin.date between @datefrm and @dateto
end

它向我显示错误, 当我改变程序时 对此

alter proc TMSautomail
@datefrm datetime,
@dateto datetime
as
begin
SELECT
     tblUser.Email
from
     tblUser
         left outer join
     userlogin
         on
      tblUser.UserName = userlogin.username
where userlogin.date between @datefrm and @dateto and userlogin.username is null
end

程序 return 的空白栏,

我想获取 table 一封电子邮件并使用不在 table 中的用户名进行验证 2,

我的第二个 table 由一个条目组成

它应该 return 所有行 table 一个

使用NOT IN和sub-query:

CREATE PROCEDURE TMSautomail(
    @datefrm datetime,
    @dateto datetime
)
AS
BEGIN

    SELECT u.Email
    FROM tblUser u
    WHERE u.Email NOT IN (
        SELECT Email
        FROM tblUser u1
            INNER JOIN UserLogin l
                ON u1.Username = l.Username
        WHERE l.Date BETWEEN @datefrm AND @dateto
    )

END

试试这个,

SELECT u.Email
    FROM tblUser u
    WHERE  NOT EXISTS (
        SELECT Email
        FROM  UserLogin l
                WHERE u1.Username = l.Username
        AND l.Date BETWEEN @datefrm AND @dateto
    )