2012-01-06 17 views
2

私は次の表を持っています:compare。私は7日以内に言うそれらの任意の日付を持っている場合、私の結果からidproductさんを除外したい条件が満たされた場合、SQLは結果を除外しますか?

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

:私はproducts表と内部結合を行う必要があります。

私は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

私はこの1つの例をテストしていましたが、結局私は削除します(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() 
    ) 

ドン'JOINテーブルcompareに加えて。あなたの説明によれば、NOT EXISTSでチェックするだけで十分です。

+0

これはうまくいくようです。 – Standage

+0

これは、比較のない製品を選択します。元はありません。 –

+0

あなたの右、いいえ参加する必要はありません!これはより効率的な答えです。どうもありがとう – Standage

2

ずに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

私の問題を解決したようです。乾杯。 – Standage

関連する問題