Sql Server 表别名的问题,在线等答案,急急急,求知道的大神解答一下

直接上代码吧,两段sql,sql语句的有些where条件被我删除掉了,不然解释起来太麻烦。

问题就是:注意两段sql绿色的部分,用这个 o 和不用 o 的不用点在哪里?查询结果不一样又是为什么?能讲解一下原理最好,谢谢大家!

一:子查询里面使用 o.UserID,查询结果只有一条.

select 
o.id Id,
c.name CompanyName ,
u.phone Phone ,
o.TotalPrice TotalPrice
from [order] o
left join [dbo].[CompanyInfo] c on o.userid=c.id
left join [dbo].[user] u on o.userid=u.id
where o.[ID] in  (  select top  (10)  id from
(
    select id,ROW_NUMBER() over(order by id desc) r from [order]
        where o.UserID=83863  and TotalPrice>0
) t where t.r> (0))

 

二:子查询里面直接使用 UserID,查询结果不止10条

select 
o.id Id,
c.name CompanyName ,
u.phone Phone ,
o.TotalPrice TotalPrice
from [order] o
left join [dbo].[CompanyInfo] c on o.userid=c.id
left join [dbo].[user] u on o.userid=u.id
where o.[ID] in  (  select top  (10)  id from
(
    select id,ROW_NUMBER() over(order by id desc) r from [order]
        where UserID=83863  and TotalPrice>0
) t where t.r> (0))
qq_遁去的一_1
浏览 518回答 15
15回答

翻阅古今

不能用o,

肥皂起泡泡

额,翔哥,好久不见,说具体点,我理解的意思大概是用o他指向的就是外面那个,查询的时候数据会不对,但是我搞不明白,你具体讲讲呗。

Qyouu

@吴瑞祥 翔哥,人呢?吃饭去了?

米脂

@晓菜鸟: 用o的时候挺乱,我也理不清, 1.执行from 连接3个表,左连接 2.执行where,执行子查询,子查询where的时候用外面的表.会有什么问题也是十分不清楚. 这个SQL谁写的?

繁华开满天机

@吴瑞祥: 一个同事写的,你也认识,接手你发短信的那个。用o的时候查询比较慢,而且数据不对。

开满天机

@晓菜鸟: 这个子查询感觉上没任何必要......纯粹浪费性能的.. 话说发短信那个东西还在维护?我以为我一走那就没人用了

MM们

@吴瑞祥: 嗯,是的,我就是为了弄清楚他们的区别,这个sql我已经优化了,发上来你看一下,短信那个没删,目前短信通道还算可以,所以也没怎么维护. WITH orderdetail AS ( select o.id Id,c.name CompanyName ,u.phone Phone o.TotalPrice TotalPrice ,ROW_NUMBER() OVER(order by o.[ID] desc) rownum from [Order] o left join [CompanyInfo] c on o.UserID=c.ID left join [User] u on o.UserID=u.ID where u.ID=83863 and o.TotalPrice>0 ) select * from orderdetail where rownum between 1 and 30

慕尼黑8549860

@晓菜鸟: 嗯,这样写多好啊,把服务器升级成2012吧。有分页语句可以直接用啦。 不用写这么麻烦的分页了

婷婷同学_

用了O是对外面的order做限制  不用才是里面的查询条件限制

小怪兽爱吃肉

我想知道他们在查询的时候会产生什么不同,原理是什么,您能详细讲解一下吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server