日期:2014-05-18 浏览次数:20560 次
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
select MIN(soh2.OrderDate) from Sales.SalesOrderHeader soh2 where soh2.CustomerID=soh1.CustomerID
SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选分组; 6、计算所有的表达式; 7、使用order by对结果集进行排序。 另外:一个查询语句各个部分的执行顺序: --8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list> --(1) FROM <left_table> --(3) <join_type> JOIN <right_table> --(2) ON <join_condition> --(4) WHERE <where_condition> --(5) GROUP BY <group_by_list> --(6) WITH {CUBE | ROLLUP} --(7) HAVING <having_condition> --(10) ORDER BY <order_by_list>
------解决方案--------------------
死循环不会,但是效率肯定低了:父查询涉及的表的每条记录,都需要执行一个子查询
一直不喜欢这种“乱伦”的查询,理解略麻烦,效率更成问题