2017-02-13 69 views
0

我有兩個表聯接SQL

1)tbluser 2)USERLOGIN

tbluser由

用戶名和電子郵件

和userlogin看起來像

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 

過程返回空白列,

我想獲取表中的電子郵件,以用戶名不屬於表2證實,

我的第二個表是由一個入口

它應該返回表中的一個

+0

有沒有必要加入,只有NOT IN與子查詢。 –

+0

我也使用過,但是當我添加where子句它顯示所有行 –

+0

也顯示該查詢 –

回答

1

使用NOT IN的所有行和子查詢:

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 
0

試試這個,

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 
    )