2

朝、

私のクエリ (以下) がWHEREamzLive の句を無視している理由がわかりません。そして、まだ重複を返しています。

SELECT  asin
FROM    dbo.aboProducts
WHERE  (asin NOT IN
             (SELECT DISTINCT productAsin
              FROM   dbo.LowestPrices
              WHERE (priceDate > GETDATE() - 1))) AND (amzLive = 'true')

アイテムのリストを返していますが、amzLive が true または false に設定されているアイテムをまだ戻しています。

誰かが私が間違っているところを見ることができますか?

要求に応じて DB 構造を更新 します... aboProducts テーブル

id          int            Unchecked
asin        nvarchar(50)   Checked
codeType    int            Checked
sku         nvarchar(50)   Unchecked
amzPrice    decimal(18, 2) Checked
amzLive     bit            Checked
lastUpdated datetime       Checked

最低価格表

id           int            Unchecked
productAsin  nvarchar(50)   Unchecked
price        decimal(18, 2) Unchecked
postage      decimal(18, 2) Checked
priceDate    datetime       Unchecked
twAmzPrice   decimal(18, 2) Checked
4

3 に答える 3

1

これはうまくいきます

Select *
From 
(SELECT  asin,amzLive
FROM    dbo.aboProducts
WHERE  (asin NOT IN
             (SELECT DISTINCT productAsin
              FROM   dbo.LowestPrices
              WHERE (priceDate > GETDATE() - 1)
              )
         ) 
       )X
where X.amzLive = 'true'

これも試してみてください

SELECT ap.asin
FROM dbo.aboProducts ap
Left Join   (SELECT DISTINCT productAsin FROM dbo.LowestPrices  WHERE (priceDate > GETDATE() - 1))x
ON ap.asin  = x.productAsin
WHERE ap.amzLive = 'true' 
AND LEN(ap.asin) > 0 -- ap.asin IS NOT NULL
于 2012-09-04T10:02:25.880 に答える
0
  1. ビットで「true」と「false」を使用しないでください。1 または 0 を使用してください。
  2. Aleft joinはクエリをより明確にし、より予測可能にします
  3. 参考までに、SQL Server には money データ型があります

例えば

select ASIN
from aboProducts
    left join lowestprices
        on aboProducts.asin = lowestprices.productAsin
        and lowestprices.pricedate > (GETDATE()-1)
where lowestprices.productAsin is null
and aboProducts.amzlive=1
于 2012-09-04T10:12:03.683 に答える
0
SELECT  asin
FROM    dbo.aboProducts
WHERE  (asin NOT IN
             (SELECT DISTINCT productAsin
              FROM   dbo.LowestPrices
              WHERE (priceDate > dateadd(day,-1,GETDATE()) ))) AND (amzLive = 'true')
于 2012-09-04T10:09:38.963 に答える