sql: хотите выбрать запись из таблицы 1, основываясь на совпадающей (или не совпадающей) записи в таблице 2 - PullRequest
1 голос
/ 15 октября 2011

У меня есть две таблицы.Они связаны вместе с идентификатором пользователя.Что я хотел сделать, так это проверить, есть ли связанная запись в таблице 2 И если поле даты в этой таблице старше, чем определенное время ИЛИ, если во 2-й таблице нет связанной записи.

Я думал, что хочу левое соединение, но оно игнорирует поле даты.Если во 2-й таблице нет записей, то я хочу игнорировать 2-ю таблицу.Но если во 2-й таблице есть совпадающая запись, а дата находится за пределами моего диапазона, я не хочу выбирать эти записи.

SELECT FirstName, Email, u.userid FROM u
LEFT JOIN uevh
ON u.UserID = uevh.UserID AND uevh.LastEmailed < GETDATE()-14
WHERE u.ConfirmedEmail = 0

, если я запускаю эту запись, и в уэве есть записьтаблица, которой менее 14 дней, я не хочу, чтобы возвращалась запись, но она возвращает запись независимо от даты.

Ответы [ 2 ]

2 голосов
/ 15 октября 2011
SELECT u.FirstName
     , u.Email
     , u.userid 
FROM u
WHERE NOT EXISTS
        ( SELECT *
          FROM uevh
          WHERE u.UserID = uevh.UserID
            AND NOT (uevh.LastEmailed < GETDATE()-14)
        )
  AND u.ConfirmedEmail = 0 

или:

SELECT u.FirstName
     , u.Email
     , u.userid 
FROM u
WHERE ( EXISTS
        ( SELECT *
          FROM uevh
          WHERE u.UserID = uevh.UserID
            AND uevh.LastEmailed < GETDATE()-14
        )
     OR NOT EXISTS
        ( SELECT *
          FROM uevh
          WHERE u.UserID = uevh.UserID
        )
      )
  AND u.ConfirmedEmail = 0 

или:

SELECT u.FirstName
     , u.Email
     , u.userid 
FROM u
  LEFT JOIN uevh
    ON u.UserID = uevh.UserID 
WHERE u.ConfirmedEmail = 0
  AND ( uevh.LastEmailed < GETDATE()-14
     OR uehv.UserID IS NULL
      )
1 голос
/ 15 октября 2011

Вы можете попробовать что-то вроде этого.Это не проверено, но должно работать.

Declare @date datetime;
Set @date='20110101';

Select *
from tbl1 
Left outer join tbl2 on tbl1.Id =tbl2.Id
  and @date > coalesce(tbl2.date,dateadd(day,1,@date));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...