伙计我试图在两个不同的SQL语句上使用COUNT。一个是使用连接,另一个是使用子查询。但问题是,两者都显示不同的行数。 那是为什么?
查询1:
SELECT COUNT(*) AS 'Count',
(SELECT c.CustomerName
FROM dbo.tblCustomer c
WHERE o.CustomerID = c.CustomerID) AS 'CustomerName',
(SELECT ProductName
FROM dbo.tblProduct p
WHERE o.ProductID = p.ProductID) AS 'ProductName'
FROM dbo.tblOrder o
WHERE (o.OrderDate BETWEEN '2014-5-15' AND '2014-5-20')
GROUP BY o.CustomerID, o.ProductID
查询2:
SELECT COUNT(*) AS 'Count',
dbo.tblCustomer.CustomerName,
dbo.tblProduct.ProductName
FROM dbo.tblCustomer
INNER JOIN dbo.tblOrder ON dbo.tblCustomer.CustomerID = dbo.tblOrder.CustomerID
INNER JOIN dbo.tblProduct ON dbo.tblOrder.ProductID = dbo.tblProduct.ProductID
WHERE (dbo.tblOrder.OrderDate BETWEEN '2014-5-15' AND '2014-5-20')
GROUP BY CustomerName,ProductName
两个查询本质上是相同的,除了一个使用JOIN而另一个使用子查询。那么为什么我得到不同的行数呢?
答案 0 :(得分:1)
在第一个查询中,您按ID分组,第二个查询按名称分组。因此,第一个查询为您提供每个客户和产品的计数,而第二个查询为您提供每个同名客户和同名产品的计数。
示例:强>
user 1 = John, user 2 = John
product a = toy, product b = toy
orders: 1 a, 1 a, 1 b, 2 a
查询1:
2, John, toy
1, John, toy
1, John, toy
查询2:
4, John, toy