2012-01-06 12 views
0

私は2つのテーブルを持っており、idProductによって別のテーブルに存在するすべてのエントリを検索する必要があります(dateStampが7日以下の場合のみ)。SQL、日付で検索し、存在しません

私が使用しているAPIは一度に3000件の結果しか処理できないため、アプリケーションは終了し、次回はアプリケーションを実行するときにidProduct3000以上のidProductsが必要ですSuppliercodeがテーブルに既に存在する可能性が高いため、何回も実行されます。

私はsqlではnot existsと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

私はあなたはそれがすべての行を見つけているように、今、あなたの内側のクエリ(NOT EXISTS (SELECT idProduct FROM compare WHERE (products.idProduct = idProduct) OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE())))が)見えるようidProductことにより、2つの表の行と一致するようにしたい推測しています一致しないサブクエリは、一致する行または日付が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

+0

私は助けてくれました。 :) – Kyra

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

ではなく、INないようにしよう:

... 
and ProductId NOT IN 
    (SELECT 
     idProduct 
     FROM compare 
     WHERE 
     (products.idProduct = idProduct) 
     OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE())))) 
.... 
関連する問題