SQL исключить результаты, если условие выполняется? - PullRequest
2 голосов
/ 07 января 2012

У меня есть следующая таблица: compare.Мне нужно выполнить внутреннее объединение с таблицей products:

idCompare idProduct dateStamp
1         1         2011-12-12
2         1         2011-12-10
3         1         2012-01-05

Я хочу исключить idproduct из моих результатов, если у кого-либо из них будет дата, скажем, в течение 7 дней.

Я пытался использовать NOT IN и NOT EXISTS без успеха

SELECT     products.idProduct
FROM         products INNER JOIN
             compare ON products.idProduct = compare.idProduct
WHERE
(products.idProduct = '1') AND (products.idProduct 
    NOT IN
    (SELECT     idProduct
    FROM          compare
    WHERE      (products.idProduct = compare.idProduct) AND
    (dateStamp < DATEADD(DAY, - 7, GETDATE())))) 

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Может выглядеть так:

SELECT p.idProduct
FROM   products AS p
WHERE  NOT EXISTS (
   SELECT *
   FROM   compare AS c
   WHERE  c.idProduct = p.idProduct
   AND    c.dateStamp BETWEEN DATEADD(DAY, - 7, GETDATE()) AND GETDATE()
   )

Не JOIN к столу compare в дополнение. Проверка с NOT EXISTS достаточно согласно вашему описанию.

2 голосов
/ 07 января 2012

Попробуйте это для своего not exists:

select
    *
from
    products p
    inner join compare c on
        p.idProduct = c.idProduct
where
    not exists (
        select
            1
        from
            compare c2
        where
            c2.idProduct = p.idProduct
            and c2.datestamp between dateadd(day, -7, getdate()) and getdate()
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...