简单语句的理解,求前辈们为小弟解答
才学SQL Server2008一个月,发现对语句的理解很不到位
[code=SQL][/code]
USE AdventureWorks2008
SELECT soh1.CustomerID,soh1.SalesOrderID,soh1.OrderDate
FROM Sales.SalesOrderHeader soh1
WHERE soh1.OrderDate = (SELECT MIN(soh2.OrderDate)
FROM Sales.SalesOrderHeader soh2)
--WHERE soh2.CustomerID = soh1.CustomerID)
ORDER BY CustomerID;
注释WHERE语句前,得到的是每个CustomerID中最小的OrderDate
列出一小部分:
CustomerID OrderDate
110002001-07-22 00:00:00.000
110012001-07-18 00:00:00.000
110022001-07-10 00:00:00.000
110032001-07-01 00:00:00.000
110042001-07-26 00:00:00.000
110052001-07-02 00:00:00.000
110062001-07-27 00:00:00.000
110072001-07-12 00:00:00.000
110082001-07-28 00:00:00.000
110092001-07-30 00:00:00.000
注释后,得到最小Orderdate的一些CustomerID
列出一小部分:
CustomerID OrderDate
110032001-07-01 00:00:00.000
145012001-07-01 00:00:00.000
217682001-07-01 00:00:00.000
258632001-07-01 00:00:00.000
283892001-07-01 00:00:00.000
294892001-07-01 00:00:00.000
294912001-07-01 00:00:00.000
为什么是这结果?各位前辈们给我讲讲对语法的理解吧。。。
[解决办法]
不加表示是子查询那个表本身所有数据的最小日期,加where表示对于外部每个 CustomerID 对应表本身最小的日期。
例如 子查询的表 有数据
CustomerID orderdate
1 '2012-01-01'
1 '2012-02-02'
2 '2012-07-01'
不加 where 那么查出来的是 '2012-01-01' 只有这一个
加where条件后,对于CustomerID是1的,按'2012-01-01'取,对于CustomerID是2的,按'2012-07-01'取。