繁体   English   中英

内部联接无效的对象名称

[英]Inner Join Invalid Object Name

尝试做一个简单的内部联接查询,但不断出错

Select Alias from Db.SchmaName.Customers as Customer
Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias

Db和SchmaNames完全相同,但是2个表之间的Alias列不同。

两个select语句均按预期工作,但内部联接的错误为

“无效的对象名称'订单'”

即使我不使用表别名,而是键入表的完整路径,也会出现此错误

我很惊讶这就是您遇到的错误。 ORDER是SQL Server中的保留字,请勿将其用于对象名和别名,您应该会得到以下错误:

'order'附近的语法不正确。

不要为对象名称使用保留词(或什至实际上是关键词),或者,如果需要的话,请使用引号( [Order] )。 我个人会这样做:

SELECT Alias --This is missing an alias as well, so would be ambigous
FROM Db.SchmaName.Orders O
     INNER JOIN Customer C ON C.Alias = O.Alias;

别名非常适合使您的SQL简洁。 将表Customers作为Customer别名,实际上并没有做到这一点。 许多人(例如我本人)倾向于使用几个字符为表添加别名。 因此,对于Customer我使用C 就个人而言,我倾向于在对象名称中使用特定单词的字母。 例如,如果我有一个名为StockItem的表,则可能会使用SI 对于我称为ic_BD_HPT1的表,我使用HPT1

使用不同的表别名而不是key word of SQL(Order) ,另一个问题别名表存在于两个表中,因此在选择中使用table.column,并且您的联接需要如下

Select Customer.Alias from Db.SchmaName.Customers as Customer
inner join Db.SchmaName.Orders as O
 on Customer.Alias = O.Alias

那是两个查询,而不是一个。

Select Alias from Db.SchmaName.Customers as Customer
Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias

实际上是

Select Alias from Db.SchmaName.Customers as Customer;

Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias;

第二个查询无效,因为它试图将Order别名与其自身连接。

要连接两个表,您需要在FROM,JOIN语句中指定表本身。 如果要选择两个表中都存在的一列,则必须明确指定想要的列,例如:

Select Order.Alias 
from Db.SchmaName.Orders as [Order]
Inner Join Db.SchmaName.Customers as Customer 
    on Customer.Alias = [Order].Alias;

ORDER是关键字,这意味着您需要将其括在方括号中或使用更好的别名。 实际上, Orders很好:

Select Orders.Alias 
from Db.SchmaName.Orders 
Inner Join Db.SchmaName.Customers as Customer 
    on Customer.Alias = Orders.Alias;

Order是SQL中的关键字。 您不能在SQL中使用关键字作为别名,除非您在别名周围加上[]。 我将使用其他名称作为别名。

您的问题中有两个查询。

这是一

Select Alias from Db.SchmaName.Customers as Customer

这是第二个

Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias

您遇到的错误是在第二个查询上,您正在尝试将JOIN赋予表OrdersAlias ,即ORDER 相反,您应该在ON子句上引用Alias,就像这样

Select Order.Alias, Customer.Alias
from Db.SchmaName.Orders as Order
INNER JOIN Db.SchmaName.Customers as Customer on Order.Alias = Customer.Alias

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM