【发布时间】:2017-07-01 00:47:16
【问题描述】:
我有两张桌子
1) tbluser 2) 用户登录
tbluser 由
用户名和电子邮件
和用户登录看起来像
create table userlogin
(
username varchar(50),
[date] datetime
)
我想从 tbluser 中选择电子邮件并验证用户登录(表 2)
我想要来自表 1 的员工的电子邮件,这些员工不在表 2 中,并且具有选定的日期范围
所以我创建了一个程序
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
程序返回空白列,
我想获取表 1 的电子邮件并使用不在表 2 中的用户名进行验证,
我的第二张表由一个条目组成
它应该返回表一的所有行
【问题讨论】:
-
不需要加入,只需要 NOT IN 和子查询。
-
我也使用过,但是当我添加 where 子句时,它会显示所有行
-
同时显示该查询
-
ok 子查询正在运行
标签: sql-server date stored-procedures inner-join notin