2012-01-06 4 views
2

У меня есть следующая таблица: compare. Мне нужно сделать внутреннее соединение с products таблицы:SQL, чтобы исключить результаты, если условие выполнено?

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())))) 
+0

Вы выбираете 'products.idProduct', хотя вы определяете его как' 1'. Это намеренно? – kba

+0

Я просто тестировал этот пример, в конце концов, я удалю (products.idProduct = '1') – Standage

+0

Вам не нужно присоединяться к 'ON products.idProduct = compare.idProduct'? Также вы хотите '>' или '> =' вместо '<' в последней строке, не так ли? –

ответ

2

может выглядеть следующим образом:

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() 
    ) 

Дону 't JOIN к таблице compare в добавлении. Проверка с NOT EXISTS достаточно в соответствии с вашим описанием.

+0

Это, похоже, тоже работает, спасибо – Standage

+0

Это будет выбирать продукты без сравнения вообще, которые оригинал не будет. –

+0

Да, ваше право, не требуется! Это более эффективный ответ. Большое спасибо – Standage

2

Попробуйте для 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() 
    ) 
+0

Вы обнаружили несоответствие условия соединения. –

+0

Кажется, решил мою проблему. Cheers – Standage

Смежные вопросы