SQL server 种JOIN后的语句无法别名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server 种JOIN后的语句无法别名相关的知识,希望对你有一定的参考价值。

如图所示,不管写不写as,这个地方的别名都不能用,错误里的B是现在 s的位置。


----你错误的地方为 sum(degree) 没有指定别名
create table A(keyId int,name varchar(10))
create table B(keyId int,qty int)
go

insert into A(keyId,name)values(1,'a'),(2,'b')
insert into B(keyId,qty)values(1,20),(1,30),(2,60),(3,20)
go

select a.*,tmp.qty from A 
left join (
select keyId,sum(qty) as qty  from b group by keyid
)  tmp
 on a.keyId = tmp.keyId 
 



go
truncate table A 
drop table A 
truncate table B
drop table B

参考技术A sqlserver查询的执行顺序是:
(1)FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate>
(2)WHERE <where_predicate>
(3)GROUP BY <group_by_specification>
(4)HAVING <having_predicate>
(5)SELECT DISTINCT TOP(<top_specification>) <select_list>
(6)ORDER BY <order_by_list>

所以在where执行的时候,别名还不存在,而order by的时候已经存在

如何在两个 SELECT 语句之间在 SQL Server 中执行 LEFT JOIN?

【中文标题】如何在两个 SELECT 语句之间在 SQL Server 中执行 LEFT JOIN?【英文标题】:How to perform a LEFT JOIN in SQL Server between two SELECT statements? 【发布时间】:2011-12-14 23:38:17 【问题描述】:

我在 SQL Server 中有两个 SELECT 语句,如下所示:

(SELECT [UserID] FROM [User])
(SELECT [TailUser], [Weight] FROM [Edge] WHERE [HeadUser] = 5043)

我想在 [UserID] 属性和 [TailUser] 属性的这两个 SELECT 语句之间执行 LEFT JOIN。我想将第二个查询中的现有记录与第一个查询中的相应记录和缺失记录的 NULL 值连接起来。我该怎么做?

【问题讨论】:

这个问题应该重新打开,因为左连接两个选择语句是一项一般和具体的任务; “这个问题不太可能帮助任何未来的访问者”的评论是错误的,因为它帮助了我。 【参考方案1】:

试试这个:

SELECT user.userID, edge.TailUser, edge.Weight 
FROM user
LEFT JOIN edge ON edge.HeadUser = User.UserID
WHERE edge.HeadUser=5043

AND edge.HeadUser=5043

而不是 WHERE 子句。

【讨论】:

【参考方案2】:
select *
from user
left join edge
on user.userid = edge.tailuser
and edge.headuser = 5043

【讨论】:

【参考方案3】:
SELECT * FROM 
(SELECT [UserID] FROM [User]) a
LEFT JOIN (SELECT [TailUser], [Weight] FROM [Edge] WHERE [HeadUser] = 5043) b
ON a.UserId = b.TailUser

【讨论】:

【参考方案4】:
SELECT [UserID] FROM [User] u LEFT JOIN (
SELECT [TailUser], [Weight] FROM [Edge] WHERE [HeadUser] = 5043) t on t.TailUser=u.USerID

【讨论】:

以上是关于SQL server 种JOIN后的语句无法别名的主要内容,如果未能解决你的问题,请参考以下文章

SQL-高级命令语句:like通配符,as别名,join连接

关于sql查询语句中的别名

sql语句写法——as后的别名中有括号怎么处理(Oracle)

sql语句中别名怎么使用

SQL Server:如何在更新语句中使用别名?

SQL Server JOINS:SQL Server 中是不是默认关联“JOIN”语句“LEFT OUTER”? [复制]