SQL相关查询混淆
我正在使用AdventureWorks数据库进行实践,但我陷入了一些相关的查询逻辑。有人能帮我吗? 下面的查询生成不同的数据 第一个查询返回客户的订单日期以及每个客户的第一个订单日期下的所有订单SQL相关查询混淆,sql,sql-server-2008,Sql,Sql Server 2008,我正在使用AdventureWorks数据库进行实践,但我陷入了一些相关的查询逻辑。有人能帮我吗? 下面的查询生成不同的数据 第一个查询返回客户的订单日期以及每个客户的第一个订单日期下的所有订单 SELECT t1.SalesOrderID, t1.CustomerID, ( SELECT MIN(t2.OrderDate) FROM Sales.SalesOrderHeader t2
SELECT t1.SalesOrderID,
t1.CustomerID,
(
SELECT MIN(t2.OrderDate)
FROM Sales.SalesOrderHeader t2
WHERE t2.CustomerID = t1.CustomerID
) AS orderdate
FROM Sales.SalesOrderHeader t1
1, C1, 2011, 2011
2, C1, 2012, 2011
3, C1, 2013, 2011
第二个查询返回第一个日期的仅针对客户的第一个订单
USE AdventureWorks2008R2
GO
SELECT t1.SalesOrderID,
t1.CustomerID,
t1.OrderDate
FROM Sales.SalesOrderHeader t1
WHERE t1.OrderDate =
(
SELECT MIN(t2.OrderDate)
FROM Sales.SalesOrderHeader t2
WHERE t2.customerID = t1.customerID
)
ORDER BY t1.CustomerID
第一个查询从customerId返回orderId、customerId和第一个订单的日期 从所有订单中,您每行可以获得这3条信息 第二个查询将结果限制为某个客户在此部分下订单(可能是订单)的第一个日期的结果:
(select MIN(t2.OrderDate) from Sales.SalesOrderHeader t2 Where t2.customerID = t1.customerID)
这两个查询的结果将有所不同。。 第一个查询将返回SalesOrderHeader的所有记录 考虑从T2选择ToalOrthID、CustomerId和OrthDead,从T2选择OrthDead。< /P> 现在,第一个查询将返回u所有记录,无论客户ID如何,销售订单的t1.OrderDate,而t2也将返回该客户的MinOrder日期
SELECT t1.SalesOrderID,
t1.CustomerID,
(
SELECT MIN(t2.OrderDate)
FROM Sales.SalesOrderHeader t2
WHERE t2.CustomerID = t1.CustomerID
) AS orderdate
FROM Sales.SalesOrderHeader t1
1, C1, 2011, 2011
2, C1, 2012, 2011
3, C1, 2013, 2011
第二个查询将只返回OrderDate为最小值的记录
1, C1, 2011, 2011
您的问题是什么?您根本不应该为此使用相关子查询。你应该使用连接。相关子查询一次只运行一行,而不是作为一个集合运行,这大大降低了处理速度。因此,我知道,使用这样的一个几乎从来都不是一个好主意。只是想知道为什么上面的查询结果不同,你是对的。我想知道为什么第二个查询返回每个客户的单个记录,即使客户在第一个订单日期有多个订单ID。。。。。