2017-02-13 8 views
0

У меня есть две таблицыиспользованием (не) в внутреннем соединении SQL

1) tbluser 2) Userlogin

tbluser состоят из

имя пользователя и адрес электронной почты

и userlogin выглядит как

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

я хочу, чтобы выбрать электронную почту от tbluser и проверки UserLogin (таблица 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 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 
    )