2012-01-06 64 views
0

我有两个表,并需要搜索通过idProduct存在于一个表中的另一个表中的所有条目,只有当日期(邮戳)小于或超过7天以上。SQL,按日期搜索,不存在

因为我使用的API一次只能处理3000个结果,所以应用程序将关闭,下一次运行应用程序时,我只想为idProduct说3000或更大的idProducts,这个将会运行无数次供应商代码,很可能已经存在于表格中。

所以我一直在寻找的不存在,并在SQL而不是GETDATE功能能够得到想要的结果。

SELECT 
    * 
FROM 
    products 
WHERE 
    (active = - 1) 
    AND suppliercode = 'TIT' 
    and (NOT EXISTS 
    (SELECT 
     idProduct 
     FROM compare 
     WHERE 
     (products.idProduct = idProduct) 
     OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE())))) 

任何指针都会很棒,我已将OR更改为AND,但它似乎没有带来正确的结果。

回答

1

我猜你想idProduct为现在以匹配两个表中的列的内部查询(NOT EXISTS (SELECT idProduct FROM compare WHERE (products.idProduct = idProduct) OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE()))))看起来是找到所有行那不匹配。由于您的子查询会查找匹配的所有行或日期早于7天的行,并确保它们不存在。

这是你想要的吗?

SELECT * 
FROM products as p 
LEFT JOIN compare as c 
    ON p.idProduct = c.idProduct 
WHERE p.active = -1 and p.suppliercode = 'TIT' and c.dateStamp < DATEADD(DAY,-7,GETDATE()) 
+0

是的你的正确,我需要先做一个联接,这个工作,一个内部联接产生正确的结果。感谢指针,但。 – Standage 2012-01-06 18:00:50

+0

很高兴我能够提供帮助。 :) – Kyra 2012-01-06 18:04:11

0

你试过这个吗?

SELECT * FROM products 
WHERE (active = - 1) AND 
suppliercode = 'TIT' 
and ipProduct NOT IN 
(
    SELECT idProduct FROM compare 
    WHERE 
    (products.idProduct = idProduct) OR 
    (compare.dateStamp < DATEADD(DAY,-7,GETDATE())) 
) 
0

尽量做到不存,而不是:

... 
and ProductId NOT IN 
    (SELECT 
     idProduct 
     FROM compare 
     WHERE 
     (products.idProduct = idProduct) 
     OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE())))) 
....