一个比较全面的例子:
select RCFiltered.ClassName, R.RecipeTitle
from
(select RecipeClassId,
RecipeClassDescription as ClassName
From Recipe_Classes as RC
where RC.ClassName = 'Salads' or RC.ClassName = 'Soup' or Rc.ClassName = 'Main Course')
as RCFiltered
left outer join Recipes as R
on RCFiltered.RecipeClassId = R.RecipeClassId
这个例子的内涵:
1. 在大多数sql的实现中,我们可以把from子句中的任何表名替换成一条完整的select语句.当然,必须分配一个相关名称。本例中为子select语句分配的名称为RCFiltered,在第7行。
2. 当我们决定以select代替表名的时候,要确保select的结果不仅包含想要出现在最终结果中的列,而且包含需要执行join的列。这就是为什么我们在嵌入的select语句中既看到了RecipeClassId又看到了RecipeClassDescription.
3. 我们给RecipeClassDescription一个别名ClassName,所以在第一行使用了RDFiltered的别名。第一行的select只看到了表RCFiltered,看不到表Recipe_Classes