2012-01-06 87 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())))) 
....