谁能告诉我为什么这两个查询没有返回相同数量的行?
SELECT ProductSubcategoryID AS ProdSubID
FROM Production.Product
WHERE EXISTS (
SELECT 1
FROM Production.Product
WHERE Weight IS NOT NULL
)
SELECT ProductSubcategoryID AS ProdSubID
FROM Production.Product
WHERE Weight IS NOT NULL
Production.Product可以在AdventureWorks中找到
答案 0 :(得分:4)
这些与where子句中的谓词不同。
第一个查询将返回ProductSubcategoryID
中的每个Production.Product
,只要至少有一条记录,其中Weight
不是null
,
第二个查询将返回ProductSubcategoryID
中的每个Production.Product
,其中同一行中的Weight
不是null
。
要使查询等效,第一个查询中的子查询必须与外部查询相关联-您可以这样做:
SELECT ProductSubcategoryID AS ProdSubID
FROM Production.Product As p0
WHERE EXISTS (
SELECT 1
FROM Production.Product As p1
WHERE p1.<row identifier> = p0.<row identifier>
AND Weight IS NOT NULL )
<row identifier>
表示表中每一行的唯一值(或一组值)。