[英]Why is my query ignoring one of the WHERE clauses?
早上,
我无法弄清楚为什么我的查询(下面)忽略了amzLive的WHERE
子句。 并且仍在返回重复项。
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的项。
有人可以看到我要去哪里了吗?
根据要求更新数据库结构... 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
这会起作用
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
SELECT asin
FROM dbo.aboProducts
WHERE (asin NOT IN
(SELECT DISTINCT productAsin
FROM dbo.LowestPrices
WHERE (priceDate > dateadd(day,-1,GETDATE()) ))) AND (amzLive = 'true')
left join
将使您的查询更清晰,更可预测 例如
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.