在内部联接中使用(不在)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
)
我有两个 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
)