请教带虚拟表的SELECT语句逻辑:子查询别名M1、M2作用解析
这段SQL代码逻辑解析
括号内SELECT语句的作用
括号里的select VAR1 from dbo.mydata和select VAR2 from dbo.yourdata是子查询,作用是从原表中仅提取需要的列:
- 第一个子查询从
dbo.mydata表中取出VAR1列的所有数据 - 第二个子查询从
dbo.yourdata表中取出VAR2列的所有数据
别名M1、M2的意义
这两个别名是给对应子查询的结果集起的临时表名(也就是你提到的「虚拟表」):
M1指代第一个子查询生成的虚拟表,后续可以通过M1.VAR1明确引用这个虚拟表里的VAR1列M2指代第二个子查询生成的虚拟表,后续可以通过M2.VAR2明确引用这个虚拟表里的VAR2列
整段SQL的实际效果
这段代码用了老式的逗号分隔表的连接写法,等价于内连接(INNER JOIN)两个虚拟表,最终返回两张表中VAR1和VAR2值相等的所有记录对,结果会包含VAR1和VAR2两列数据。
现在更推荐用标准JOIN语法编写,可读性更强,等价写法如下:
select M1.VAR1, M2.VAR2 from (select VAR1 from dbo.mydata) M1 inner join (select VAR2 from dbo.yourdata) M2 on M1.VAR1 = M2.VAR2
内容的提问来源于stack exchange,提问作者Georg
相关产品推荐
相关产品推荐

